Bonjour à tous,
J'ai besoin de votre aide car je rencontre un problème pour lire un fichier Excel édité via java et jxl api.
Je vous explique mon problème :
J'ai un fichier excel avec des formules, j'écris dans ce fichier excel une valeur qui va ensuite interagir avec les formules et tout recalculer. Jusque là ca marche, mon problème intervient lorsque je vais lire les valeurs recalculées. Ces valeurs ne prennent pas en compte l'écriture faite auparavant, donc je me retrouve avec les mêmes valeurs qu'avant avoir écrit alors que lorsque j'ouvre le fichier excel (à la main) les valeurs ont bien changées.
Je vous serez vraiment reconnaissante si vous pouviez m'aider à comprendre le problème car cela fait 2 jours que je cherches...
Voici les bouts de code que j'utilise :
Pour écrire dans le fichier Excel :
Fonction écrire :
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 public void DataSend(String ExcelName, ComputeInfo GUIInfo, String Label)throws JDOMException, BiffException, WriteException, IOException{ WriteFile myWriteFile = new WriteFile(); ReadFile myReadFile = new ReadFile(); Workbook workbook = null; String path = " "; int count; /* Récupération des données XML */ XMLData(); Workbook model = Workbook.getWorkbook(new File(ExcelName)); if (ExcelName == "Antenna DataBase.xls") path = "Antenna.xls"; WritableWorkbook newDoc = Workbook.createWorkbook(new File(path), model); WritableSheet worksheet = newDoc.getSheet(0); if(Label == "WriteSpotSizeAndFrequency"){ for(count = 0; count < GUIInfo.NbTailleSpot; count++){ System.out.println("tab" + count); if (count == 0){ myWriteFile.writeCell(worksheet, AntennaInformation.XMLFrequencyDownlink, GUIInfo.DownFrequency); myWriteFile.writeCell(worksheet, AntennaInformation.XMLFrequencyUplink, GUIInfo.UpFrequency); myWriteFile.writeCell(worksheet, AntennaInformation.XMLSpotSize, GUIInfo.TailleSpot[count]); newDoc.write(); newDoc.close(); /*Récupération du classeur Excel (en lecture)*/ workbook = Workbook.getWorkbook(new File(path)); workbook.close(); model.close(); AntennaDataBaseRecovery(path); GUIInfo.Gain[count] = AntennaInformation.Gain; System.out.println("Après lecture Send: " + AntennaInformation.Gain); } /*else { newDoc = Workbook.createWorkbook(new File("Antenna.xls"), model); worksheet = newDoc.getSheet("ant_reflecteur"); myWriteFile.writeCell(worksheet, AntennaInformation.XMLFrequencyDownlink, GUIInfo.DownFrequency); myWriteFile.writeCell(worksheet, AntennaInformation.XMLFrequencyUplink, GUIInfo.UpFrequency); myWriteFile.writeCell(worksheet, AntennaInformation.XMLSpotSize, GUIInfo.TailleSpot[count]); newDoc.write(); newDoc.close(); AntennaDataBaseRecovery("Antenna.xls"); GUIInfo.Gain[count] = AntennaInformation.Gain; }*/ } } // if(newDoc!=null){ // /*On ferme le workbook pour libérer la mémoire */ // newDoc.close(); // } }
Lecture dans le fichier Excel :
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 public void writeCell(WritableSheet ws0, int[] location, double data) { WritableCell cell0 = ws0.getWritableCell(location[1], location[0]); CellFormat format = cell0.getCellFormat(); Number cellbis = new jxl.write.Number(location[1],location[0],data) ; cellbis.setCellFormat(format); try { ws0.addCell(cellbis); } catch (RowsExceededException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (WriteException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }
Fonction lire :
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 public void AntennaDataBaseRecovery(String ExcelName)throws JDOMException, BiffException, IOException{ ReadFile myReadFile = new ReadFile(); AntennaInformation = new AntennaInfo(); int CountLoop; String ExcelSheet; Workbook workbook = null; /* Récupération des données XML */ XMLData(); /*Récupération du classeur Excel (en lecture)*/ workbook = Workbook.getWorkbook(new File(ExcelName)); ExcelSheet = "ant_reflecteur"; AntennaInformation.SpotSize = 0; AntennaInformation.FrequencyDownlink = 0; AntennaInformation.FrequencyUplink = 0; AntennaInformation.AntennaSize = 0; AntennaInformation.Gain = 0; AntennaInformation.FrequencyDownlink = myReadFile.getDoubleExcelContent(workbook, ExcelSheet, AntennaInformation.XMLFrequencyDownlink[0] , AntennaInformation.XMLFrequencyDownlink[1]); AntennaInformation.FrequencyUplink = myReadFile.getDoubleExcelContent(workbook, ExcelSheet, AntennaInformation.XMLFrequencyUplink[0] , AntennaInformation.XMLFrequencyUplink[1]); AntennaInformation.SpotSize = myReadFile.getDoubleExcelContent(workbook, ExcelSheet, AntennaInformation.XMLSpotSize[0] , AntennaInformation.XMLSpotSize[1]); AntennaInformation.Gain = myReadFile.getDoubleExcelContent(workbook, ExcelSheet, AntennaInformation.XMLGain[0] , AntennaInformation.XMLGain[1]); AntennaInformation.AntennaSize = myReadFile.getDoubleExcelContent(workbook, ExcelSheet, AntennaInformation.XMLAntennaSize[0] , AntennaInformation.XMLAntennaSize[1]); System.out.println("ExcelName : " + ExcelName); System.out.println("Après lecture Recovery: " + AntennaInformation.Gain); System.out.println("Après lecture Recovery: " + AntennaInformation.SpotSize); System.out.println("Après lecture Recovery: " + AntennaInformation.FrequencyDownlink); System.out.println("Après lecture Recovery: " + AntennaInformation.FrequencyUplink); System.out.println("Après lecture Recovery: " + AntennaInformation.AntennaSize); if(workbook!=null){ /*On ferme le workbook pour libérer la mémoire */ workbook.close(); } }
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 public double getDoubleExcelContent(Workbook ExcelFile, String ExcelSheet, int ExcelRow, int ExcelColumn)throws BiffException, IOException{ /* Déclaration des variables de type "Excel" */ Sheet sheet; //Cell CellSearch; Cell CellSearch; String StringSearch; double Content = 0; /* Pointe vers la feuille souhaitée */ sheet = ExcelFile.getSheet(ExcelSheet); /* Sélectionne la cellule voulue */ //CellSearch = sheet.getCell(ExcelColumn,ExcelRow); CellSearch = sheet.getCell(ExcelColumn,ExcelRow); /* Sélectionne la cellule voulue */ /* Renvoie le contenu de la cellule voulue */ StringSearch = CellSearch.getContents(); if (StringSearch != ""){ try { Content = Double.parseDouble(StringSearch.toString().replaceAll(",", ".")); } catch (Exception e) { javax.swing.JOptionPane.showMessageDialog(null, "Erreur : la valeur '" + StringSearch + "' située dans la cellule ( " + ExcelColumn + " , " + ExcelRow + " ) + n'a pu être convertie en double"); } } else Content = 0; return Content; }
Partager