Bonjour, je dois générer des tableaux de bord, en partant d'une trame (fichier excel) contenant déjà des formules (pourcentages, sommes, ...) et une mise en page.
Je souhaite donc simplement remplir des cellules avec des valeurs provenant d'une base de données. Le nombre de lignes peut varier.
J'ai pas eu trop de souci, mais j'ai constaté que les formules ne sont pas appliquées ! C'est à dire qu'il faut que l'utilisateur revienne sur le fichier Excel, édite une case concernée par une formule pour que la formule s'applique !
Qqn a t'il déjà rencontré le pb ? C'est très emm...
D'autre part, j'aimerai savoir s'il est possible de faire l'équivalent d'un "Copier ligne, insérer les cellules copiées", avec tout ce que cela entraine sur Excel (conservation des styles, mises à jour des formules, etc)
Merci !
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 POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("c:\\TableauDeBord2.xls")); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFSheet s = wb.getSheetAt(0); HSSFRow r = null; HSSFCell c = null; short rownum = 0; for (rownum = (short) 9; rownum < 11; rownum++) { r = s.getRow(rownum); // Les styles sont bien conservés, mais les formules pas appliqués !!! c = r.getCell((short) 1); c.setCellValue(20); c = r.getCell((short) 2); c.setCellValue(53); c = r.getCell((short) 3); c.setCellValue((double) 1068); c = r.getCell((short) 4); c.setCellValue("Suisse"); c = r.getCell((short) 5); c.setCellValue(51); c = r.getCell((short) 6); c.setCellValue(1024); //Si on fait ça, les formules sont bien appliquées (uniquement avec createCell ??) //Mais du coup, c'est fastidieux, et il faut revoir le formatage de la valeur (%,...) //c = r.createCell((short) 7); c.setCellType(HSSFCell.CELL_TYPE_FORMULA); //c.setCellFormula("G10/$I$3*$K$3/D10"); c = r.getCell((short) 8); c.setCellValue(85); c = r.getCell((short) 9); c.setCellValue(924); c = r.getCell((short) 11); c.setCellValue(913); c = r.getCell((short) 12); c.setCellValue(75); c = r.getCell((short) 13); c.setCellValue(1192); } // Imposssible d'enlever une ligne ==> Height=0 s.getRow((short) 12).setHeight((short) 0); s.getRow((short) 13).setHeight((short) 1); // Write the output to a file FileOutputStream fileOut = new FileOutputStream("c:\\test_TDB.xls"); wb.write(fileOut); fileOut.close();
Partager