Bonjour à tous,
Je me suis rendu compte que j'ai développé sur Poi pour rien... enfin a vous de me dire....
J'ai un bug qui apparemment n'est pas résolu avec la version 3.7 et 3.8beta5 à ce jour.
En effet, j'ai ce message d'erreur-ci:
Lorsque j'execute ce programme (l'erreur provient de la ligne en gras):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Exception in thread "main" java.lang.RuntimeException: Unexpected missing row when some rows already present at org.apache.poi.hssf.usermodel.HSSFSheet.setPropertiesFromSheet(HSSFSheet.java:168) at org.apache.poi.hssf.usermodel.HSSFSheet.<init>(HSSFSheet.java:115) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:299) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:250) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:194) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:329) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:310) at Extraction.main(Extraction.java:93)
le bug est référencé ici:
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 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class TrouveeDateDsFichier { public static void main(String[] args) { try { HSSFWorkbook wbd; InputStream istr; HSSFSheet sheetd; HSSFRow rowd; HSSFCell celld; String date_extract="25/01/2012"; DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); java.util.Date datextract; Calendar calendar = Calendar.getInstance(); int semaine = 0; //faire une vérification pour savoir: //si la date du fichier n'est pas trouvée sur istr = new FileInputStream("C:/Donnees/Aide_Manager/date_extract1.xls"); //ce fichier permettra de récupérer les dates pour savoir si un extract à déjà été utilisé. wbd = new HSSFWorkbook(istr); sheetd = wbd.getSheetAt(0); rowd = null; celld = null; boolean date_stockee_trouvee = false; int dernLigneTrouvee = 0; for (Iterator r = sheetd.rowIterator(); r.hasNext();){ rowd = (HSSFRow) r.next(); celld = rowd.getCell(0); //System.out.println("lalalalalala"); if(celld != null ){ if(celld.getCellType()==0){ System.out.println("c'est un nombre: "+celld.getNumericCellValue()); }else{ System.out.println("c'est une chaine: "+celld.getStringCellValue()); if(celld.getStringCellValue().equals(date_extract)){// si on trouve que la date_extract est = à la date trouvée dans le fichier System.out.println("DATE TROUVEE Ds le fichier !"); System.out.println("CETTE EXTRACT A DEJA ETE UTILISEE !!"); System.out.println("MERCI D'UTILISER UN AUTRE EXTRACT CONCERNANT UNE AUTRE DATE !"); date_stockee_trouvee=true; } } dernLigneTrouvee = rowd.getCell(0).getRowIndex(); } } dernLigneTrouvee++; System.out.println("dernLigneTrouvee: "+dernLigneTrouvee); //si la date n'est pas trouvée dans le fichier System.out.println("date_stockee_trouvee: "+date_stockee_trouvee); if(date_stockee_trouvee==false){ //retrouver la dernière ligne du fichier pour y ecrire la date System.out.println("retrouver la dernière ligne du fichier: "+dernLigneTrouvee); //pour crée la date ds le fichier //et pour la retrouver et eviter de rajouter la validation d'un extract comportant la même date rowd.setRowNum(dernLigneTrouvee); sheetd.createRow(0); celld = rowd.createCell(0); celld.setCellValue(date_extract); System.out.println("La nouvelle date_extract '"+date_extract+"' a été stocké dans le fichier."); //pour ecrire dans le même fichier FileOutputStream fileOutd = new FileOutputStream("C:/Donnees/Aide_Manager/date_extract1.xls"); wbd.write(fileOutd); fileOutd.close(); // Date actuelle datextract = formatter.parse(date_extract); calendar.setTime(datextract); semaine = calendar.get(Calendar.WEEK_OF_YEAR);//récupérer la semaine dans l'année pour faire la comparaison avec les onglet du fichier de destination //System.out.println(calendar.get(Calendar.WEEK_OF_YEAR)); } } catch (FileNotFoundException e){ e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
https://issues.apache.org/bugzilla/s...g.cgi?id=49312
et puis, j'ai constaté ce post qui date de 2006:
http://www.developpez.net/forums/d25...poi-vs-jexcel/
Trés intéressant aussi car il indique que JexcelApi consomme moins mémoire que poi.
Si quelqu'un a une idée sur ce bug, j'attend vos post.
Sinon je pense que je vais tout refaire avec JExcel.
Partager