[POI] Lire + écrire dans un format CSV
Bonjour,
j'aimerai lire un fichier en format csv dans lequel je stocke la date.
Du genre:
Code:
1 2
|
01/01/2012; 02/01/2012; |
ce fichier doit-être parcourue.
on fait une comparaison avec une date.
si on ne trouve pas la date, il devra écrire la date que je récupère.
si on trouve la date, il affichera qu'on a trouver la date dans le fichier.
je fais ceci:
Code:
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
|
date_extract = row.getCell(0).getStringCellValue().substring(3,13);//on récupère la date
System.out.println("date_extract: "+date_extract);
//faire une vérification pour savoir:
//si la date du fichier n'est pas trouvée sur
InputStream ist = new FileInputStream("C:/Donnees/Aide_Manager/date_extract1.csv");
HSSFWorkbook wbd = new HSSFWorkbook(ist);
HSSFSheet sheetd = wbd.getSheetAt(0);
HSSFRow rowd = null;
HSSFCell celld = null;
for (Iterator r = sheetd.rowIterator(); r.hasNext();){
rowd = (HSSFRow) r.next();
celld = rowd.getCell(0);
if(celld != null ){
if(celld.getCellType()==0){
System.out.println("c'est un nombre: "+celld.getNumericCellValue()+" index: "+celld.getRowIndex());
}else{
System.out.println("c'est une chaine: "+celld.getStringCellValue());
if(celld.getStringCellValue().equals(date_extract)){
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;
}
}
}
}
if(date_stockee_trouvee==false){//si la date n'est pas trouvée dans le fichier
//retrouver la dernière ligne du fichier pour y ecrire la date
System.out.println("retrouver la dernière ligne du fichier: "+rowd.getLastCellNum());
//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(rowd.getLastCellNum());
celld = rowd.createCell(0);
celld.setCellValue(date_extract);
//pour ecrire dans le même fichier
FileOutputStream fileOutd = new FileOutputStream("C:/Donnees/Aide_Manager/date_extract1.csv");
wbd.write(fileOutd);
fileOutd.close();
} |
Mais il m'affiche cette erreur-ci:
Code:
1 2 3 4 5 6 7 8
| date_extract: 25/01/2012
java.io.IOException: Unable to read entire header; 2 bytes read; expected 32 bytes
at org.apache.poi.poifs.storage.HeaderBlockReader.alertShortRead(HeaderBlockReader.java:176)
at org.apache.poi.poifs.storage.HeaderBlockReader.<init>(HeaderBlockReader.java:103)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:153)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:305)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:286)
at Extraction.main(Extraction.java:91) |
La ligne qui lui pose problème, c'est celle-ci:
Code:
1 2
|
HSSFWorkbook wbd = new HSSFWorkbook(ist); |
A mon avis, POI ne doit pas géré les csv? non...?