Impossible d'importer XSSF dans Apache POI

121

Je fais référence à la version 3.7 du POI Apache et j'obtiens une erreur «impossible à résoudre» lorsque je fais:

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

Les autres instructions d'importation qui font référence à POI NE DOIVENT PAS me donnent erreurs, telles que:

import org.apache.poi.ss.usermodel.*;

Des idées??

Mark Jackson
la source
J'avais le même problème, il semble être enraciné dans le fichier poi-3.whatever.jar n'ayant pas le xssf emballé à l'intérieur pour une raison quelconque
M. Redstoner

Réponses:

197

Pour qu'OOXML fonctionne, vous avez besoin du pot POI-OOXML qui est emballé séparément du pot POI.

Téléchargez le bocal POI-OOXML à partir de l'emplacement suivant -

http://repo1.maven.org/maven2/org/apache/poi/poi-ooxml/3.11/poi-ooxml-3.11.jar

Pour Maven2, ajoutez la dépendance ci-dessous -

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.11</version>
</dependency>
Pushkar
la source
C'est ce dont j'avais besoin. Pour moi (version 3.11), j'avais simplement besoin d'ajouter un fichier jar supplémentaire: poit-ooxml-3.11-20141221.jar. Je ne savais pas qu'il n'y avait aucun lien entre eux. Merci pour la réponse Pushkar +1.
Clint L
32

Les classes pour les formats de fichier OOXML (tels que XSSF pour .xlsx) se trouvent dans un fichier Jar différent. Vous devez inclure le jar poi-ooxml dans votre projet, ainsi que ses dépendances

Vous pouvez obtenir une liste de tous les composants et de leurs dépendances sur le site Web POI ici .

Ce que vous voulez probablement faire est de télécharger le paquet binaire 3.11 , de récupérer le fichierpoi-ooxml jar et les dépendances dans le ooxml-librépertoire. Importez-les dans votre projet et vous serez trié.

Alternativement, si vous utilisez Maven, vous pouvez voir ici la liste des artificats sur lesquels vous voudrez dépendre, mais cela voudrait être quelque chose comme:

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml</artifactId>
   <version>3.11</version>
</dependency>

La dépendance maven poi-ooxml récupérera automatiquement le fichier jar POI principal et les dépendances. Si vous souhaitez travailler avec les formats non-tableur, vous voudrez également dépendre de l' poi-scratchpadartefact également, comme détaillé sur la page des composants POI

Gagravarr
la source
10

J'ai ajouté le contenu ci-dessous dans l'application "build.gradle"

implementation 'org.apache.poi:poi:4.0.0'
implementation 'org.apache.poi:poi-ooxml:4.0.0'
Dang Thach Hai
la source
ça a vraiment aidé
Abror Esonaliyev
8

Si vous utilisez Maven:

poi => poi-ooxml dans artifactId

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.12</version>
    </dependency>
Stéphane GRILLON
la source
Je suggère d'utiliser POI 3.12 final ( 3.12) plutôt que la version bêta
Gagravarr
6

Problème: lors de l'importation de la classe "org.apache.poi.xssf.usermodel.XSSFWorkbook" affichant une erreur dans eclipse.

Solution: utilisez cette dépendance maven pour résoudre ce problème:

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml</artifactId>
   <version>3.15</version>
</dependency>

-Hari Krishna Neela

Hari Krishna Neela
la source
2

1) importé tous les JARS du dossier POI 2) Importé tous les JARS du dossier ooxml dont un sous-répertoire du dossier POI 3) Importé tous les JARS du dossier lib qui est un sous-répertoire du dossier POI

String fileName = "C:/File raw.xlsx";
File file = new File(fileName);
FileInputStream fileInputStream;
Workbook workbook = null;
Sheet sheet;
Iterator<Row> rowIterator;
try {
        fileInputStream = new FileInputStream(file);
        String fileExtension = fileName.substring(fileName.indexOf("."));
        System.out.println(fileExtension);
        if(fileExtension.equals(".xls")){
        workbook  = new HSSFWorkbook(new POIFSFileSystem(fileInputStream));
        }
        else if(fileExtension.equals(".xlsx")){
        workbook  = new XSSFWorkbook(fileInputStream);
        }
        else {
        System.out.println("Wrong File Type");
        } 
        FormulaEvaluator evaluator workbook.getCreationHelper().createFormulaEvaluator();
        sheet = workbook.getSheetAt(0);
        rowIterator = sheet.iterator();
        while(rowIterator.hasNext()){
        Row row = rowIterator.next();
        Iterator<Cell> cellIterator = row.cellIterator();
        while (cellIterator.hasNext()){
        Cell cell = cellIterator.next();
        //Check the cell type after evaluating formulae
       //If it is formula cell, it will be evaluated otherwise no change will happen
        switch (evaluator.evaluateInCell(cell).getCellType()){
        case Cell.CELL_TYPE_NUMERIC:
        System.out.print(cell.getNumericCellValue() + " ");
        break;
        case Cell.CELL_TYPE_STRING:
        System.out.print(cell.getStringCellValue() + " ");
        break;
        case Cell.CELL_TYPE_FORMULA:
        Not again
        break;
        case Cell.CELL_TYPE_BLANK:
        break;
        }
}
 System.out.println("\n");
}
//System.out.println(sheet);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}​
Aman Khatri
la source
La ligne n'est pas importée ... pouvez-vous partager le lien du fichier jar s'il vous plaît
démo
1

J'ai eu le même problème, alors j'ai fouillé le fichier poi-3.17.jar et il n'y avait pas de paquet xssf à l'intérieur.

J'ai ensuite parcouru les autres fichiers et trouvé xssf dans le poi-ooxml-3.17.jar

Il semble donc que la solution consiste à ajouter

poi-ooxml-3.17.jar

à votre projet, car cela semble le faire fonctionner (pour moi du moins)

Monsieur Redstoner
la source
0

Vous n'avez pas décrit l'environnement, de toute façon, vous devez télécharger les bibliothèques apache poi. Si vous utilisez eclipse, cliquez avec le bouton droit de la souris sur votre projet racine, de sorte que les propriétés et le chemin de construction java ajoutent un fichier jar externe et importent dans votre projet ces bibliothèques:

xmlbeans-2.6.0; schémas-poi-ooxml- ...; poi-ooxml- ...; poi- ....;

franc
la source
0

J'avais besoin des fichiers suivants pour mon implémentation:

  • poi-ooxml-schemas-3.14.20160307.jar
  • commons-codec-1.10.jar (c'était dans le dossier "lib" du fichier zip que vous obtenez d'apache)
  • courbesapi-1.03.jar (dans le dossier "ooxml-lib")
  • poi-3.14-20160307.jar
  • poi-ooxml-3.14-20160307.jar
  • xmlbeans-2.6.0.jar (dans le dossier "ooxml-lib")

(même si honnêtement, je ne suis pas tout à fait sûr qu'ils soient tous nécessaires ...) C'est un peu déroutant car ils sont emballés de cette façon. J'avais besoin de les placer manuellement dans mon propre dossier "lib" puis d'ajouter les références ...

Maven semble toujours télécharger plus que ce dont j'ai besoin, donc je place toujours des bibliothèques / dll et des choses comme ça manuellement.

pcalkins
la source
Apache POI fournit une page pratique expliquant quels jars sont nécessaires pour quoi , et tout ce dont vous avez besoin est fourni dans le téléchargement binaire, donc cela n'a pas à être déroutant ou mystérieux!
Gagravarr
cette page est pratique si vous allez utiliser Maven, mais je préfère ajouter des dépendances manuellement. La page ne répertorie pas tout séparément. Certains d'entre eux ne sont pas visibles au moment de la construction, mais vous les trouverez en vérifiant les exceptions au moment de l'exécution. Mon implémentation importe des fichiers XLS et XLSX dans une jtable. Ce qui précède semblait être tout ce qui était nécessaire pour cela.
pcalkins
1
Tout ce qui y est répertorié est livré dans le téléchargement binaire! Les bocaux dont les composants ont besoin et les dépendances dont les bocaux ont besoin
Gagravarr
0

Après avoir essayé plusieurs choses, ce qui a vraiment fonctionné était: 1. le téléchargement manuel de "poi" et "poi-ooxml" 2. l'ajout de ces jars n / w dans les "dépendances Maven"

Sanchi Tyagi
la source