1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257
|
// OPération qui va charger l'Objet JAVA à partir d'une table
// Le nom long du fichier entête en entrée devra ressembler à : "src/EntetesOngletsExcel/EnteteSyntheseMoniteurDeFlux.txt"
// Le nom long du fichier Excel en sortie devra ressemblé à :
// "C:/TEMP/referentiel/excel/2021-02-23-Mise_a_jour_referentiel_des_flux_Tests22-sortie.xls"
// Le libellé de la requête doit ressembler à : "# Recuperation des champs de la table TB_SyntheseMoniteurDeFlux"
public void chargementFichierExcelAPartirDUneTable(String e_nomLongFichierContenantUneEntete, String e_nomLongFichierExcelEnSortie,
String e_libelleDeLaRequete) {
// Déclaration ds variable locale
OngletExcel l_ongletExcel = new OngletExcel();
Fichiers l_fichiers = new Fichiers();
RequetesHybrides l_requetesHybrides = new RequetesHybrides();
Object[][] l_corpsDuTabeleau = null;
String[] l_enteteDuTableau = null;
List<String[]> l_listeContenuDeLaTableRelationnel = new ArrayList<String[]>();
List<String[]> l_listeContenuDuFichierCSV = new ArrayList<String[]>();
String l_nomDeLaBase = new String("NFF10");
String l_laRequete = null;
String l_suiteNomColonneDeLatable = null;
String l_nomDeLOnglet = null;
String c_pointVirgule = new String(";");
// La seul chose qui nous interesse ici, c'est de récupérer la première ligne de ce fichier
// en effet cette première ligne contient le descriptif du fichier que l'on souhaite injecter
// dans Excel Finale.
// On aurait très bien pu prendre aussi moniteursPasDansGIFTPreProduction.csv qui
// contient la même description
// String l_fichierContenatUneEntete = new String("src/EntetesOngletsExcel/EnteteSyntheseMoniteurDeFlux.txt");
String[] l_tableauValeurColonne = null;
GestionDuStyle l_gestionDuStyle = new GestionDuStyle();
File l_fichier = null;
FileOutputStream l_fileOutputStream = null;
HSSFWorkbook l_classeur = null;
CellStyle[] l_tableauStyleDeCellule = new CellStyle[3];
int l_nombreDeColonne = 0;
int l_nombreDeligne = 0;
int l_positionChaineDeCaractere = 0;
try {
// Suppression du fichier en sortie s'il existait au préalable
// l_fichiers.suppressionDUnFichier(e_nomLongFichierExcelEnSortie);
// Récupération de la requête de lecture de la table TB_Synthese...
l_laRequete = l_fichiers.recuperationRequeteDansFichierTexte("src/requetesSQL/RequetesSynthese.txt", e_libelleDeLaRequete);
// System.out.println("La requête est : " + l_laRequete);
l_listeContenuDeLaTableRelationnel = l_requetesHybrides.recuperationDeDonneesAPartirDuneBase(l_laRequete, l_nomDeLaBase);
// récupération du nombre de ligne de la table TB_SyntheseMoniteurDeFlux
l_nombreDeligne = l_listeContenuDeLaTableRelationnel.size();
// récupération du nombre de colonne à partir du fichier de la description des entête
l_suiteNomColonneDeLatable = l_fichiers.lectureDUnFichiers(e_nomLongFichierContenantUneEntete);
l_tableauValeurColonne = l_suiteNomColonneDeLatable.split(Pattern.quote(c_pointVirgule));
l_nombreDeColonne = l_tableauValeurColonne.length;
// Instantiation de l'objet l_corpsDuTabeleau
l_corpsDuTabeleau = new Object[l_nombreDeligne][l_nombreDeColonne];
// Instantiation de l'objet l_corpsDuTabeleau
l_enteteDuTableau = new String[l_nombreDeColonne];
// réinitialisation du tableau de valeur de colonne
for (int i = 0; i < l_tableauValeurColonne.length; i++) {
l_tableauValeurColonne[i] = null;
}
// Remplissage du tableau Objet à double entrée
for (int i = 0; i < l_listeContenuDeLaTableRelationnel.size(); i++) {
l_tableauValeurColonne = l_listeContenuDeLaTableRelationnel.get(i);
for (int j = 0; j < l_tableauValeurColonne.length; j++) {
// System.out.println("La valeur est : " + l_tableauValeurColonne[j]);
// Dans le cas ou la vaelur du champ est null, mettre rien ("") à la place
if (l_tableauValeurColonne[j] == null) {
l_tableauValeurColonne[j] = "";
}
l_corpsDuTabeleau[i][j] = l_tableauValeurColonne[j];
}
}
l_ongletExcel.setaCorpsDuTabeleau(l_corpsDuTabeleau);
l_listeContenuDuFichierCSV = l_fichiers.chargementFichierCSVDansUneListe(e_nomLongFichierContenantUneEntete);
// Seule la première ligne du fichier () nous interesse
l_enteteDuTableau = l_listeContenuDuFichierCSV.get(0);
l_ongletExcel.setaEnteteDuTableau(l_enteteDuTableau);
System.out.println("Le nom du fichier est : " + e_nomLongFichierExcelEnSortie);
l_fichier = new File(e_nomLongFichierExcelEnSortie);
// Le booleen true est important c'est lui qui permet d'écrire à la suite des données enregistrées sans les écraser
// l_fileOutputStream = new FileOutputStream(e_nomLongFichierExcelEnSortie, true);
l_fileOutputStream = new FileOutputStream(l_fichier, true);
if (l_fichier.exists() && l_fichier.length() != 0) {
System.out.println("Le fichier : " + e_nomLongFichierExcelEnSortie + " existe et n'est pas vide");
l_classeur = (HSSFWorkbook) WorkbookFactory.create(l_fichier);
} else {
System.out.println("Le fichier : " + e_nomLongFichierExcelEnSortie + " N'existe PAS");
l_classeur = new HSSFWorkbook();
}
// Valorisation du style de la cellule pour l'entete
l_tableauStyleDeCellule[0] = l_gestionDuStyle.styleGris(l_classeur);
// Valorisation du style de la cellule en bleu clair pour le corps du tableau
l_tableauStyleDeCellule[1] = l_gestionDuStyle.styleBleuClair(l_classeur);
// Valorisation du style de cellule standard (blanc) pour le corps du tableau
l_tableauStyleDeCellule[2] = l_gestionDuStyle.styleStandard(l_classeur);
// Recupération de la position de la chaine de caractere "TB_"
// l'idée étant de recupérer le nom de la table (ou de l'onglet, c'est la même chose)
l_positionChaineDeCaractere = e_libelleDeLaRequete.indexOf("TB_");
l_nomDeLOnglet = e_libelleDeLaRequete.substring(l_positionChaineDeCaractere);
System.out.println("Le nom de l'onglet est : " + l_nomDeLOnglet);
l_classeur = l_ongletExcel.dechargementObjetJavaDansOngletExcel(l_classeur, l_nomDeLOnglet, l_tableauStyleDeCellule);
l_classeur.write(l_fileOutputStream);
l_classeur.close();
l_fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// Opération qui a partir du nom d'un classeur, d'un nom d'onglet et d'un tableau de style en entrée
// charge un onglet Excel. Au préalable il aura bien évidement chargé la matrice d'objet à l'aide de l'opération
// chargementTableauExcelDansObjetJava
public HSSFWorkbook dechargementObjetJavaDansOngletExcel(HSSFWorkbook e_classeur, String e_nomDOnglet, CellStyle[] e_tableauStyleDeCellule) {
// déclaration des variables locales
Sheet l_onglet = null;
Row l_ligne = null;
String l_valeur = null;
String l_titreDeLaColonne = null;
int l_longeurDuTitre = 0;
Cell l_cellule = null;
GestionDuStyle l_gestionDuStyle = new GestionDuStyle();
CellStyle l_styleDeLaCellule = null;
// if (this.getaDernierNomDeFichier().compareTo(e_nomDeFichier) != 0) {
// this.setaDernierNomDeFichier(e_nomDeFichier);
// }
System.out.println("Philippe5 - Le nom de l'onglet est : " + e_nomDOnglet);
// if (!e_nomDOnglet.equals(this.getaDernierNomDOnglet())) {
// this.setaDernierNomDOnglet(e_nomDOnglet);
// }
// Pour test
// this.setaDernierNomDOnglet("TB_SyntheseFluxMontant");
// System.out.println("Philippe5 - Le dernier nom d'onglet est : " + this.getaDernierNomDOnglet());
// e_classeur.removeSheetAt(1);
l_onglet = e_classeur.createSheet(e_nomDOnglet);
// l_onglet = e_classeur.getSheetAt(1);
System.out.println("Le nombre d'onglet dans le classeur est : " + e_classeur.getNumberOfSheets());
System.out.println("Le nom de l'onglet d'ordre 0 est : " + e_classeur.getSheetName(0));
// System.out.println("Le nom de l'onglet d'ordre 1 est : " + e_classeur.getSheetName(1));
System.out.println("L'index de l'onglet courant est : " + e_classeur.getSheetIndex(l_onglet));
l_ligne = l_onglet.createRow(0);
// boucle sur les colonnes de l'entête
for (int i = 0; i < this.getaEnteteDuTableau().length; i++) {
l_ligne.createCell(i).setCellValue(this.getaEnteteDuTableau()[i]);
l_cellule = l_ligne.getCell(i);
// Pour l'entête le style de la cellule sera gris.
l_cellule.setCellStyle(e_tableauStyleDeCellule[0]);
// redimensionnemet de la colonne en fonction de la valeur qui se trouve dans la cellule
// l_onglet.autoSizeColumn(i);
// Recuperation du libelle de la colonne
l_titreDeLaColonne = l_cellule.getStringCellValue();
System.out.println("Philippe - Le nom de la colonne est : " + l_titreDeLaColonne);
// Recuperation de la longueur du libellé
l_longeurDuTitre = l_titreDeLaColonne.length();
// Dimensionnement de la cellule qui corespondra à la longueur du liellé + 3 caractères
// pour prévoir la place de la flèche de filtre qui est à droite de la cellule
l_onglet.setColumnWidth(i, ((l_longeurDuTitre + 3) * 256));
}
// System.out.println("Je suis au début du traitement du corps du fichier");
// boucle sur les lignes corps
for (int j = 0; j < this.getaCorpsDuTableau().length; j++) {
l_ligne = l_onglet.createRow(j + 1);
// Si le n° de ligne est impaire, collorer la ligne en bleu
if (j % 2 != 0) {
// Valorisation du style de la cellule en bleu clair pour le corps du tableau
l_styleDeLaCellule = e_tableauStyleDeCellule[1];
} else {
// Valorisation du style de cellule standard (blanc) pour le corps du tableau
l_styleDeLaCellule = e_tableauStyleDeCellule[2];
}
// boucle sur les colonnes de corps
for (int i = 0; i < this.getaCorpsDuTableau()[j].length; i++) {
l_valeur = String.valueOf(this.getaCorpsDuTableau()[j][i]);
l_ligne.createCell(i).setCellValue(l_valeur);
l_cellule = l_ligne.getCell(i);
l_cellule.setCellStyle(l_styleDeLaCellule);
}
}
// Rajout de filtre sur chaque colonne de l'entête du tabelau Excel
l_onglet = l_gestionDuStyle.rajoutFiltreSurEnteteDeColonne(l_onglet);
return e_classeur;
} |
Partager