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:
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)
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
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();
	}
	}
}
le bug est référencé ici:
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.