API POI (manipulation de fichiers MS Office)

API POI (manipulation de fichiers MS Office) - Java - Programmation

Marsh Posté le 20-10-2006 à 10:53:42    

Sur un projet, je dois manipuler (lire et générer) des fichiers Excel et Word. Avant de déclencher des polémiques, oui un format propriétaire c'est le mal, l'utiliser avec Java relève du blasphème, on est d'accord mais bon c'est comme ca...
 
Je propose donc de créer un topic sur une API Java nommée POI permettant d'exploiter des fichiers au format MS Office. Voila les deux que j'ai utilisées :
- HSSF (Horrible Spreadsheet Format (!)) pour les documents Excel  
- HWPF (Horrible Word Processor Format (!)) pour les documents Word  
- ...
 
Pour plus de détails : http://jakarta.apache.org/poi/
 
http://jakarta.apache.org/poi/resources/images/project-logo.gif
 
Déjà, on remarque que l'API HSSF est beaucoup plus aboutie que les autres, notamment que HWPF qui n'est actuellement plus maintenue. C'est bien dommage.

Reply

Marsh Posté le 20-10-2006 à 10:53:42   

Reply

Marsh Posté le 20-10-2006 à 11:02:21    

koslan a écrit :

Sur un projet, je dois manipuler (lire et générer) des fichiers Excel et Word. Avant de déclencher des polémiques, oui un format propriétaire c'est le mal, l'utiliser avec Java relève du blasphème, on est d'accord mais bon c'est comme ca...


C'est quoi ce troll?  :heink:
 

koslan a écrit :

Je propose donc de créer un topic sur une API Java nommée POI


Belle initiative, mais que proposes-tu concrètement? L'utilisation de HSSF est relativement aisée, "no rocket science". Il manque deux ou trois trucs et il faut éviter certains pièges, comme les abjectes typages de cellules (vraiment pas fameux), mais à part ça (?)
 
Je l'utilise sur un petit projet et ça roule pas mal. Facile et ça fait ce qui est annoncé sur la boîte. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 20-10-2006 à 11:11:32    

Pour ceux qui ont déjà utilisé HSSF, j'ai un "souci" qui est contournable mais quand même étrange.
Je souhaite juste afficher le contenu du premier onglet d'un fichier Excel.
 
Voila le code que j'utilise:
 

Code :
  1. POIFSFileSystem fs = new POIFSFileSystem( new FileInputStream("C:/test/targets/test_rigolo97.xls" ) );
  2.                         HSSFWorkbook wb = new HSSFWorkbook(fs);
  3.                         HSSFSheet sheet = wb.getSheetAt(0);
  4.                         HSSFRow row;
  5.                         Iterator cells;
  6.                         HSSFCell cell;
  7.                      
  8.                         Iterator rows = sheet.rowIterator();
  9.                         while( rows.hasNext() ) {
  10.                                 row = (HSSFRow) rows.next();
  11.                                 System.out.println( "Row #" + row.getRowNum() );
  12.                                 cells = row.cellIterator();
  13.                              
  14.                                 while( cells.hasNext() ) {
  15.                                         cell = (HSSFCell) cells.next();
  16.                                         System.out.println( "Cell #" + cell.getCellNum() );
  17.                                         switch ( cell.getCellType() ) {
  18.                                         case HSSFCell.CELL_TYPE_NUMERIC:
  19.                                                 System.out.println( cell.getNumericCellValue() );
  20.                                                 break;
  21.                                         case HSSFCell.CELL_TYPE_STRING:
  22.                                                 System.out.println( cell.getRichStringCellValue().getString() );
  23.                                                 break;
  24.                                         default:
  25.                                                 System.out.println( "x" );
  26.                                         break;
  27.                                         }
  28.                                 }// end of row
  29.                         }


 
Avec le fichier Excel suivant :

A1 B1 C1
A2 B2 C2
A3 B3 C3
A4 B4 C4


 
Et voila ce qui s'affiche:

Row #0
Cell #1
B1
Cell #2
C1
Row #1
Cell #1
B2
Cell #2
C2
Row #2
Cell #1
B3
Cell #2
C3
Row #3
Cell #1
B4
Cell #2
C4


 
Bref, la première colonne n'est pas prise en compte... Pour qu'elle le soit, il faut explicitement afficher la première cell de la row avec:
 
 

Code :
  1. ...
  2.                 Iterator cells = row.cellIterator();
  3.                
  4.                 cell = (HSSFCell) row.getCell((short)0);
  5.                 System.out.println( "Cell #" + cell.getCellNum() );
  6.                 switch ( cell.getCellType() ) {
  7.                     case HSSFCell.CELL_TYPE_NUMERIC:
  8.                         System.out.println( cell.getNumericCellValue() );
  9.                         break;
  10.                     case HSSFCell.CELL_TYPE_STRING:
  11.                         System.out.println( cell.getRichStringCellValue().getString() );
  12.                         break;
  13.                     default:
  14.                         System.out.println("x" );
  15.                         break;
  16.                 }
  17.                 ...
  18.                 while( cells.hasNext() ) {


 
Ou alors éviter d'utiliser des Iterator. Très bizarre...  

Reply

Marsh Posté le 20-10-2006 à 11:14:16    

sircam a écrit :

C'est quoi ce troll?  :heink:
 
 
Belle initiative, mais que proposes-tu concrètement? L'utilisation de HSSF est relativement aisée, "no rocket science". Il manque deux ou trois trucs et il faut éviter certains pièges, comme les abjectes typages de cellules (vraiment pas fameux), mais à part ça (?)
 
Je l'utilise sur un petit projet et ça roule pas mal. Facile et ça fait ce qui est annoncé sur la boîte. [:pingouino]


 
C'est justement pour éviter les trolls !!
Pour le reste, cf mon deuxième message. Et s'il y a des réponses j'ai d'autres interrogations, et j'ai éventuellement des réponses à des interrogations tierces...

Reply

Marsh Posté le 20-10-2006 à 11:57:51    

Eviter un troll en commençant par "oui un format propriétaire c'est le mal, l'utiliser avec Java relève du blasphème", c'est pour le moins surprenant. [:pingouino]
 
Cela relève d'une vision quelque peu idéaliste dans laquelle Microsoft cai le malle et Java cai bieng, cai pur. :/
 
Enfin, soit. Le coup de l'itérateur, c'est pas top. J'avoue tjs boucler avec un for, car le nbre de cellules/col est connu...


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed