Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1926 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  API POI (manipulation de fichiers MS Office)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

API POI (manipulation de fichiers MS Office)

n°1461157
koslan
Posté le 20-10-2006 à 10:53:42  profilanswer
 

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.

mood
Publicité
Posté le 20-10-2006 à 10:53:42  profilanswer
 

n°1461164
sircam
I Like Trains
Posté le 20-10-2006 à 11:02:21  profilanswer
 

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}
n°1461173
koslan
Posté le 20-10-2006 à 11:11:32  profilanswer
 

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...  

n°1461175
koslan
Posté le 20-10-2006 à 11:14:16  profilanswer
 

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...

n°1461202
sircam
I Like Trains
Posté le 20-10-2006 à 11:57:51  profilanswer
 

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}

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  API POI (manipulation de fichiers MS Office)

 

Sujets relatifs
Format fichiers MAX R2 & R3[Excel/VBA] Manipulation de tableaux à 2 dimensions
Move fichiers partir d'une liste[C#] Sauvegarder des fichiers dans une base SQL Server
uploader une série de fichiers sur un serveur[C#] Effacer un répertoire contenant des fichiers "readonly"
[Batch] [Résolu] Copie de fichiers listés dans un .txtManipulation d'objets en PHP5
manipulation de graphiques avec VBA sous Access 2kfichiers d'extension ".frm" ".MYD" et "MYI"
Plus de sujets relatifs à : API POI (manipulation de fichiers MS Office)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR