Bonjour à tous,

J'utilise Apache POI 3.10. Je lis un fichier Excel 2010 et je recopie son contenu dans un nouveau fichier. Au passage, je voudrais colorier le fond des cases d'une ligne sur deux. Mais ça ne fonctionne pas... Voici mon code de test :

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
 
@Test
	public void testAjoutPrix() throws Exception {
 
		log.debug("testAjoutPrix");
 
		final File file1 = new File(fileName1);
 
		// Lecture fichier original
		final Workbook workbook = WorkbookFactory.create(file1);
		final Sheet sheet = workbook.getSheet("Feuil1");
 
		// Ajout d'une cellule
		final Row titreRow = sheet.getRow(0);
		final Cell nomCell = titreRow.getCell(0);
		final CellStyle nomCellStyle = nomCell.getCellStyle();
 
		// Ajout du titre "Prix" dans le meme style que les autres titres
		final Cell prixTitreCell = titreRow.createCell(6);
		prixTitreCell.setCellValue("Prix");
		prixTitreCell.setCellStyle(nomCellStyle);
 
		// Style
		final CellStyle s = workbook.createCellStyle();
		s.setFillBackgroundColor(IndexedColors.YELLOW.getIndex());
		//s.setFillPattern(CellStyle.SOLID_FOREGROUND);
		//s.setFillPattern(CellStyle.FINE_DOTS);
		// s.setFillPattern(CellStyle.NO_FILL);
 
		// Modifications
		int index = 1;
		Row row = sheet.getRow(index++);
 
		while (row != null) {
 
			final Cell prixCell = row.createCell(6);
			prixCell.setCellValue(123.45);
 
			// Coloriage d'une ligne sur deux
			if (index % 2 == 0) {
				for (int i = 0; i < 7; i++) {
					row.getCell(i).setCellStyle(s);
				}
			}
 
			row = sheet.getRow(index++);
		}
 
		// Ecriture dans un autre fichier
		final File file2 = new File(fileName2);
 
		// Comme je lance le test plusieurs fois, je repart d'une copie blanche à chaque fois.
		if (file2.exists()) {
			file2.delete();
		}
 
		final FileOutputStream fos = new FileOutputStream(file2);
 
		workbook.write(fos);
		fos.close();
	}
Ca me donne la capture 01 :

Nom : capture-01.png
Affichages : 3026
Taille : 51,2 Ko

J'ai essayé en mettant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
s.setFillPattern(CellStyle.FINE_DOTS);
Ca me donne la capture 02 :

Nom : capture-02.png
Affichages : 3093
Taille : 50,6 Ko

et avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
s.setFillPattern(CellStyle.SOLID_FOREGROUND);
Ca me donne la capture 03 :

Nom : capture-03.png
Affichages : 2966
Taille : 46,4 Ko

Je ne comprend pas ce qui se passe...