APACHE POI 3.5 - Lecture de fichier XLSX - InvalidFormatException !

ldavoine Messages postés 5 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 19 juin 2009 - 27 mai 2009 à 17:20
wijdani Messages postés 2 Date d'inscription lundi 23 avril 2012 Statut Membre Dernière intervention 7 août 2012 - 7 août 2012 à 14:48
Bonjour à tous,

Je viens de récupérer la dernière version du module POI d'Apache (poi-3.5-beta5-20090219.jar) afin de lire et d'écrire des fichiers EXCEL 2007 (.xlsx), mais je n'arrive même pas à faire fonctionner un exemple tout simple...

J'ai investigué tout l'après-midi et je ne trouve pas pourquoi. Voici l'exception générée lorsque j'essaye de lire un fichier ".xlsx":

Exception in thread "main" org.apache.poi.openxml4j.exceptions.InvalidFormatException: Can't read content types part !

Que ce soit un fichier issu directement d'EXCEL 2007 ou un fichier généré par POI lui-même, l'exception est levée...

Voici le code source de ma classe qui essaye de lire un fichier, rien de plus simple:
________________________________________________________
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.*;

public class Toto
{
    public static void main(String[] args)
    {
       try
       {
          XSSFWorkbook wb= new XSSFWorkbook("c:\\DemoCell.xlsx");
          XSSFSheet sheet=(XSSFSheet)wb.getSheetAt(0);
          int lastRowNum=sheet.getLastRowNum();
            
          for(int i=0;i<lastRowNum;i++)
          {
               XSSFRow row=sheet.getRow(i);
               int lastCellNum=row.getLastCellNum();
               System.out.println("\n => LIGNE "+i+"\n");
                
               for(int j=0;j<lastCellNum;j++)
               {
                   XSSFCell cell=row.getCell(j);
                   String s1=cell.getRawValue();
                   System.out.println(s1+";");
               }
          }
      }
      catch(Exception e)
     {
         e.printStackTrace();
      }
   }
}
________________________________________________________

C'est l'instanciation new XSSFWorkbook("c:\\DemoCell.xlsx"); qui plante.

En regardant sur le net, je vois en effet qu'un document OPEN XML doit avoir un type reconnu, par exemple:

* docx : application/vnd.openxmlformats-officedocument.wordprocessingml.document

* xlsx : application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

etc...

Dans mon cas (Can't read content types part !), l'API n'arrive pas à reconnaitre le type de contenu de mon fichier xlsx, mais pourquoi ???

Avez-vous une idée ? Avez-vous déjà rencontré ce probléme ? Et si oui comment l'avez-vous résolu ?

J'ai cherché sur plusieurs forum US, l'exception InvalidFormatException a déjà été rencontrée, mais sans réponse satisfaisante...

Vous m'aideriez beaucoup si vous aviez la solution, car la je sèche...

Merci d'avance.

9 réponses

maturin6666 Messages postés 4 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 11 juin 2009
11 juin 2009 à 11:42
Bjr,

je suis dans le même cas que toi, t as trouvé la solution à ton problème ?

merci
0
ldavoine Messages postés 5 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 19 juin 2009
11 juin 2009 à 15:49
Pour le moment je n'ai pas trouvé...

En dézippant un fichier XLSX (car en fait, ce n'est qu'une archive, il suffit de renommer le fichier en ".zip"), tu te rends compte qu'à la racine il y a un fichier "[Content_Types].xml" .

C'est ce fichier qui doit apparemment définir les différents types (Can't read content types part !).

Et bien POI ne le comprendrait pas ou ne le concidérerait pas comme valide (pourtant ce vient de MICROSOFT WORD lui-même...). De toute facon, le même probléme survient avec un fichier XLSX généré par POI.

Je pense donc tout simplement qu'il y a un sacré BUG dans POI...

Voici à quoi ressemble "[Content_Types].xml":

<?xml version= "1.0" encoding="UTF-8" standalone="yes"?>

<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">

<Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml" />

<Override PartName ="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>

<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>

<Default Extension="xml" ContentType="application/xml"/>

<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>

<Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>

<Override PartName="/xl/worksheets/sheet2.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>

<Override PartName="/xl/worksheets/sheet3.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>

<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>

<Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>

<Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/></Types>
0
maturin6666 Messages postés 4 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 11 juin 2009
11 juin 2009 à 16:10
J'ai trouvé !!!

Mais j 'ai laché l'affaire pour modifier un fichier xlsx = xls (excel 2003) + xml

déja pour enlever l'erreur que tu as, il faut inclure dans ton projet touts les .jar contenu dans la version beta de POI.

Ensuite y va y avoir un nouveau message d erreur.
tu dois trouver ce fichier : log4j.properties
tu le copies dans ton projet et rajoute a la fin de ce fichier :

log4j.logger.org.openxml4j=DEBUG, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

Quand tu as fini tu peux lire le fichier excel comme tu faisais, attention aux pointeurs nuls...javascript:Insert_Emoticon('/imgs2/smile_dissapprove.gif');

Par contre pour modifier un fichier xlsx c est trop compliquer il faut redéfinir le xml ....javascript:Insert_Emoticon('/imgs2/smile_clown.gif');
0
ldavoine Messages postés 5 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 19 juin 2009
11 juin 2009 à 16:32
Merci, mais moi je savais déjà ouvrir un fichier EXCEL simple (XLS), j'utilise l'API JEXCEL pour ca.

Ce qui m'intéresse avec POI, c'est justement les fichiers XLSX...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maturin6666 Messages postés 4 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 11 juin 2009
11 juin 2009 à 16:37
avec ce que je t ai dit tu peux l ouvrir un .xlsx et afficher le fichier dans la console d'éclipse par exemple. Mais pour la modif c est autre chose... j y suis pas arrivé javascript:Insert_Emoticon('/imgs2/smile_sad.gif');
0
ldavoine Messages postés 5 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 19 juin 2009
11 juin 2009 à 16:56
Ah ok. J'avais pas compris.

Tu peux me lister les JARs ? Car dans Eclipse je pense avoir tout mis. Voici ma liste:

poi-3.5-beta5-20090219.jar
poi-contrib-3.5-beta5-20090219.jar
poi-ooxml-3.5-beta5-20090219.jar
poi-scratchpad-3.5-beta5-20090219.jar
ooxml-schemas-1.0.jar
log4j-1.2.8.jar
dom4j-1.6.1.jar
jsr173_1.0_api.jar
resolver.jar
xbean.jar
xbean_xpath.jar
xmlbeans-qname.jar
xmlpublic.jar

Merci.
0
maturin6666 Messages postés 4 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 11 juin 2009
11 juin 2009 à 17:03
pour les 4 poi j'ai les même. Ensuite j'ai : commons-logging-1.1.jar, junit-3.8.1.jar, log4j-1.2.13.jar qui sont dans lib. et j'ai aussi : dom4j-1.6.1.jar, jsr173_1.0_api.jar, ooxml-schemas-1.0.jar, xmlbeans-2.3.0.jar qui eux sont dans ooxml-lib. et c est tout j'avais aussi jxl.jar pour les .xsl mais je pense qu elle ne change rien.
0
ldavoine Messages postés 5 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 19 juin 2009
19 juin 2009 à 15:41
Bah chez moi cela ne change rien...

Ca continue de ne pas fonctionner. Même erreur: Can't read content types part !
0
wijdani Messages postés 2 Date d'inscription lundi 23 avril 2012 Statut Membre Dernière intervention 7 août 2012
7 août 2012 à 14:48
Bonjour
je cherche à modifier le contenu d'un fichier .xlsx (déjà existant)à partir d'une application java
veuillez m'aider svp

maryam_mimo
0
Rejoignez-nous