Bonjour tout le monde ! Depuis maintenant quelques heures j'essaye de créer un document EXCEL à l'aide d'un programme JAVA. J'arrive pour l'instant à créer mon document, insérer du texte dans certains cellules et leurs appliquer un style ainsi que fusionner des cellules. Par contre il y a quelque chose que je n'arrive pas à faire. J'aimerai créer une liste déroulante dans mon Excel grâce à mon programme Java.
Voyons ça en image :
J'ai pour l'instant ceci
Mais j'aimerais avoir ceci :
Etant donnée que j'utilise la libraire POI de Apache, j'ai regarder la documentation. Cependant, tout cela m'a l'air ancien et très peu complet.
J'ai donc rechercher sur Internet et voici sur quoi je suis tombé :
J'ai donc repris ce code et je l'ai modifié pour qu'il correspondes à ce que je veux vraiment, voici donc mon code complet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 xes.fillCell(sheet,0,3,"VALEUR",unlockedCellStyle); CellRangeAddressList addressList = new CellRangeAddressList(0,0,3,3); //Ici la liste ne s'affichera que dans la cellule (D1) mais il est possible d'étendre la zone. Le premier 0 //correspond à la première ligne, le deuxième à la dernière ligne,le premier 3 à la première colonne et le //deuxième à la dernière colonne DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(new String { "10", "20", "30" }); DataValidation dataValidation = new HSSFDataValidation(addressList,dvConstraint); // affichage de la flèche dataValidation.setSuppressDropDownArrow(false); sheet.addValidationData(dataValidation);
J'execute donc ce programme, je précise qu'aucune erreur était signaler avant compilation, et une fois exécuter : problème. Voici le message d'erreur qui arrive dans la console. Je n'arrive pas à comprendre ce message, j'ai essayer différentes choses mais je ne sais pas d'où ça peut venir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 package org.apache.poi.ss.examples; import org.apache.poi.xssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.util.Map; import java.util.HashMap; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.DVConstraint; import org.apache.poi.hssf.usermodel.HSSFDataValidation; import org.apache.poi.ss.util.CellRangeAddressList; public class Excel { public static void main(String[] args) throws Exception { Workbook wb; if (args.length > 0 && args[0].equals("-xls")) { wb = new HSSFWorkbook(); } else { wb = new XSSFWorkbook(); } Map<String, CellStyle> styles = createStyles(wb); Sheet sheet = wb.createSheet("Configurateur E2 | Fichier de traçabilité"); sheet.setPrintGridlines(false); sheet.setDisplayGridlines(false); PrintSetup printSetup = sheet.getPrintSetup(); printSetup.setLandscape(true); sheet.setFitToPage(true); sheet.setHorizontallyCenter(true); //Taille des colonnes sheet.setColumnWidth(0, 15 * 256); sheet.setColumnWidth(1, 15 * 256); sheet.setColumnWidth(2, 15 * 256); sheet.setColumnWidth(3, 15 * 256); sheet.setColumnWidth(4, 15 * 256); sheet.setColumnWidth(5, 15 * 256); sheet.setColumnWidth(6, 15 * 256); //Création des lignes à utiliser Row titleRow = sheet.createRow(0); Row row1 = sheet.createRow((short) 1); Row row2 = sheet.createRow((short) 2); Row row3 = sheet.createRow((short) 3); Row row4 = sheet.createRow((short) 4); //Création des cellulles et assigner les lignes aux cellules titleRow.createCell(0).setCellStyle(styles.get("title")); //Créer une cellule et appliquer un style à cette cellule row1.createCell(0).setCellStyle(styles.get("rowS")); row2.createCell(0).setCellStyle(styles.get("rowS")); row2.createCell(2).setCellStyle(styles.get("rowS")); row3.createCell(0).setCellStyle(styles.get("rowS")); row3.createCell(2).setCellStyle(styles.get("rowS")); row4.createCell(0).setCellStyle(styles.get("rowS")); row4.createCell(2).setCellStyle(styles.get("rowS")); CellRangeAddressList addressList = new CellRangeAddressList(2, 2, 2, 2); DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(new String[]{"10", "20", "30"}); DataValidation dataValidation = new HSSFDataValidation(addressList, dvConstraint); dataValidation.setSuppressDropDownArrow(false); sheet.addValidationData(dataValidation); //Renseigner sur quelle cellule nous voulons écire Cell titleCell = titleRow.getCell(0); Cell row1Cell = row1.getCell(0); Cell row2Cell = row2.getCell(0); Cell row2Cell1 = row2.getCell(2); Cell row3Cell = row3.getCell(0); Cell row3Cell1 = row3.getCell(2); Cell row4Cell = row4.getCell(0); Cell row4Cell1 = row4.getCell(2); //Texte qui est insérer dans telles cellules titleCell.setCellValue("Fichier de traçabilité"); row1Cell.setCellValue("NOM DU PRODUIT"); row2Cell.setCellValue("N° référence"); row2Cell1.setCellValue("aa"); row3Cell.setCellValue("N° CI"); row3Cell1.setCellValue("bb"); row4Cell.setCellValue("N° MF"); row4Cell1.setCellValue("cc"); //Fusion des différentes cellulles sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$F$1")); sheet.addMergedRegion(CellRangeAddress.valueOf("$A$2:$F$2")); sheet.addMergedRegion(CellRangeAddress.valueOf("$A$3:$B$3")); sheet.addMergedRegion(CellRangeAddress.valueOf("$C$3:$D$3")); sheet.addMergedRegion(CellRangeAddress.valueOf("$A$4:$B$4")); sheet.addMergedRegion(CellRangeAddress.valueOf("$C$4:$D$4")); sheet.addMergedRegion(CellRangeAddress.valueOf("$A$5:$B$5")); sheet.addMergedRegion(CellRangeAddress.valueOf("$C$5:$D$5")); //Création du fichier EXCEL String file = "tracaE2.xls"; if (wb instanceof XSSFWorkbook) { file += "x"; } try (FileOutputStream out = new FileOutputStream(file)) { wb.write(out); } } /** * cell styles used for formatting calendar sheets */ private static Map<String, CellStyle> createStyles(Workbook wb) { Map<String, CellStyle> styles = new HashMap<>(); CellStyle style; Font titleFont = wb.createFont(); titleFont.setFontHeightInPoints((short) 14); titleFont.setFontName("Trebuchet MS"); style = wb.createCellStyle(); style.setFont(titleFont); style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); style.setAlignment(HorizontalAlignment.CENTER_SELECTION); styles.put("title", style); style = wb.createCellStyle(); Font rowFont = wb.createFont(); rowFont.setFontHeightInPoints((short) 9); rowFont.setFontName("Trebuchet MS"); style.setFont(rowFont); style.setAlignment(HorizontalAlignment.CENTER); styles.put("rowS", style); return styles; } }
Merci beaucoup à ceux qui m'aideront ! Pour information supplémentaire, je travaille grâce à l'IDE Netbeans 8.2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Exception in thread "main" java.lang.ClassCastException: org.apache.poi.hssf.usermodel.HSSFDataValidation cannot be cast to org.apache.poi.xssf.usermodel.XSSFDataValidation at org.apache.poi.xssf.usermodel.XSSFSheet.addValidationData(XSSFSheet.java:3918) at org.apache.poi.ss.examples.Excel.main(Excel.java:66)
Partager