POI-APACHE : Problème CRéation 2éme feuille (onglet) dans Classeur EXCEL
Bonjour,
J'arrive très bien à crée un onglet (feuille) Excel en y déversant des données provenant d'une Table Oracle via l'API-Apache.
Mais je n'arrive pas à rajouter un 2éme Onglet (feuille) Excel dans ce même classeur.
Voici mon code :
Code:
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;
} |
Globalement le 1er onglet se crée bien, mais lorsque je tente d'inserer un 2éme onglet, le programme ne plante pas, mais il ne se passe rien .... Pas de 2éme onglet crée dans le classeur.
Est ce que quelqu'un aurait une idée ?
Par avance merci.
Bien à vous.
Résolution problème POI APACHE écriture onglet dans Classeur
Finalement j'ai compris pourquoi ça ne marchait pas.
Il y avait un problème de logique, je traitais au même niveau ce qui était de l'onglet et ce qui était du classeur.
Voici donc le code final qui fonctionne :
Appel :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
...
String l_nomLongFichierExcelEnSortie = null;
String[] l_tableauFichierContenantUneEntete = { "src/EntetesOngletsExcel/EnteteSyntheseFluxDescendant.txt",
"src/EntetesOngletsExcel/EnteteSyntheseFluxMontant.txt", "src/EntetesOngletsExcel/EnteteSyntheseMoniteurDeFlux.txt" };
String[] l_tabeleauLibelleDeLaRequete = { "# Recuperation des champs de la table TB_SyntheseFluxDescendant",
"# Recuperation des champs de la table TB_SyntheseFluxMontant", "# Recuperation des champs de la table TB_SyntheseMoniteurDeFlux" };
...
l_ongletExcel.chargementFichierExcelAPartirDePlusieursTables(l_tableauFichierContenantUneEntete, l_nomLongFichierExcelEnSortie,
l_tabeleauLibelleDeLaRequete);
... |
Puis l'opération qui fait le traitement sur le classeur :
Code:
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
|
public void chargementFichierExcelAPartirDePlusieursTables(String[] e_tableauNomFichierContenantUneEntete, String e_nomLongFichierExcelEnSortie,
String[] e_tableauLibelleDeLaRequete) {
// Déclaration des variables locales
OngletExcel l_ongletExcel = null;
Fichiers l_fichiers = new Fichiers();
RequetesHybrides l_requetesHybrides = new RequetesHybrides();
ClasseurExcel l_classeurExcel = new ClasseurExcel();
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;
XSSFWorkbook l_classeur = null;
CellStyle[] l_tableauStyleDeCellule = new CellStyle[3];
int l_nombreDeColonne = 0;
int l_nombreDeligne = 0;
int l_positionChaineDeCaractere = 0;
int l_positionOngletDansClasseur = 0;
try {
// Suppression du fichier en sortie s'il existait au préalable
l_fichiers.suppressionDUnFichier(e_nomLongFichierExcelEnSortie);
System.out.println("Le nom du fichier en sortie 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) {
// if (l_fichier.length() != 0) {
// System.out.println("Le fichier : " + e_nomLongFichierExcelEnSortie + " n'est pas vide");
// l_classeur = (HSSFWorkbook) WorkbookFactory.create(l_fichier);
// } else {
// System.out.println("Le fichier : " + e_nomLongFichierExcelEnSortie + " est vide");
// l_classeurSortie = new HSSFWorkbook();
// }
// Chargement de TOUT le fichier Excel d'entree dans l'objet JAVA
// l_classeurEntree = l_classeurExcel.chargementCompletFichierExcelDansObjetJava();
l_classeur = l_classeurExcel.chargementCompletFichierExcelDansObjetJava();
// 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);
// Debut de la boucle
for (int k = 0; k < e_tableauLibelleDeLaRequete.length; k++) {
l_ongletExcel = new OngletExcel();
// Récupération de la requête de lecture de la table TB_Synthese...
l_laRequete = l_fichiers.recuperationRequeteDansFichierTexte("src/requetesSQL/RequetesSynthese.txt", e_tableauLibelleDeLaRequete[k]);
// 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_tableauNomFichierContenantUneEntete[k]);
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 valeur 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_tableauNomFichierContenantUneEntete[k]);
// Seule la première ligne du fichier () nous interesse
l_enteteDuTableau = l_listeContenuDuFichierCSV.get(0);
l_ongletExcel.setaEnteteDuTableau(l_enteteDuTableau);
// 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_tableauLibelleDeLaRequete[k].indexOf("TB_");
l_nomDeLOnglet = e_tableauLibelleDeLaRequete[k].substring(l_positionChaineDeCaractere);
System.out.println("Le nom de l'onglet est : " + l_nomDeLOnglet);
// mise à jour des 3 onglets : TB_SyntheseFluxDescendant, TB_SyntheseFluxMontant et TB_SyntheseMoniteurDeFlux
l_classeur = l_ongletExcel.dechargementObjetJavaDansOngletExcel(l_classeur, l_nomDeLOnglet, l_tableauStyleDeCellule);
// Ici l'idée est de remettre l onglet a son endroit initiale, en effet lors de la suppression et recréation de
// l'onglet dans l'opération : dechargementObjetJavaDansOngletExcel, l'onglet est automatiquement mis
// en dernière position des onglets.
l_classeur.setSheetOrder(l_nomDeLOnglet, l_positionOngletDansClasseur);
l_positionOngletDansClasseur = l_positionOngletDansClasseur + 1;
}
// Fin de la boucle
l_classeur.write(l_fileOutputStream);
l_classeur.close();
l_fileOutputStream.close();
} catch (
IOException e) {
e.printStackTrace();
}
} |
Et pour finir l'opération qui traite l'onglet :
Code:
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
|
// 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 XSSFWorkbook dechargementObjetJavaDansOngletExcel(XSSFWorkbook e_classeur, String e_nomDOnglet, CellStyle[] e_tableauStyleDeCellule) {
// déclaration des variables locales
XSSFSheet l_onglet = null;
Row l_ligne = null;
String l_valeur = null;
String l_titreDeLaColonne = null;
int l_longeurDuTitre = 0;
int l_numeroOrdreOnglet = 0;
Cell l_cellule = null;
GestionDuStyle l_gestionDuStyle = new GestionDuStyle();
CellStyle l_styleDeLaCellule = null;
Color l_couleur = null;
IndexedColorMap l_indexedColorMap = null;
XSSFColor l_xSSFCouleur = null;
System.out.println("Philippe5 - Le nom de l'onglet est : " + e_nomDOnglet);
l_onglet = e_classeur.getSheet(e_nomDOnglet);
// Si l'onglet existe le supprimer
if (l_onglet != null) {
// Recupération du n° d'ordre de l'onglet, pour ensuite supprimer l'onglet
l_numeroOrdreOnglet = e_classeur.getSheetIndex(l_onglet);
System.out.println("Le n° d'ordre de l'onglet initial qui va être supprimé est : " + l_numeroOrdreOnglet);
e_classeur.removeSheetAt(l_numeroOrdreOnglet);
System.out.println("L'onglet initial : " + e_nomDOnglet + " a été supprimé");
}
// Puis recréer l'onglet
l_onglet = e_classeur.createSheet(e_nomDOnglet);
// Positionnement de la couleur de l'onglet (ici orange) - palette de couleur RGB
// Color l_couleur = new Color(192, 192, 192); // Gris
l_couleur = new Color(228, 140, 51); // Orange
l_indexedColorMap = e_classeur.getStylesSource().getIndexedColors();
l_xSSFCouleur = new XSSFColor(l_couleur, l_indexedColorMap);
l_onglet.setTabColor(l_xSSFCouleur);
l_numeroOrdreOnglet = e_classeur.getSheetIndex(l_onglet);
System.out.println("Le nombre d'onglet dans le classeur est : " + e_classeur.getNumberOfSheets());
System.out.println("L'onglet " + e_classeur.getSheetName(l_numeroOrdreOnglet) + " d'ordre " + l_numeroOrdreOnglet + " a été recrée.");
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));
}
// 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;
} |
Voilà. Je ferme cete discussion qui s'est auto-résolue.