XSSF kann nicht in Apache POI importiert werden

121

Ich verweise auf die Version 3.7 des Apache-POI und erhalte den Fehler "Kann nicht behoben werden", wenn ich Folgendes tue:

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

Andere Importanweisungen, die auf POI verweisen, geben mir KEINE Fehler, wie z.

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

Irgendwelche Ideen??

Mark Jackson
quelle
Ich hatte das gleiche Problem, es scheint in der Datei poi-3.whatever.jar verwurzelt zu sein, in der das xssf aus irgendeinem Grund nicht gepackt ist
Mr Redstoner

Antworten:

197

Damit OOXML funktioniert, benötigen Sie das POI-OOXML-Glas, das separat vom POI-Glas verpackt ist.

Laden Sie das POI-OOXML-Glas von folgendem Speicherort herunter:

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

Fügen Sie für Maven2 die folgende Abhängigkeit hinzu:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.11</version>
</dependency>
Pushkar
quelle
Das brauchte ich. Für mich (Version 3.11) musste ich einfach ein zusätzliches Glas hinzufügen: poit-ooxml-3.11-20141221.jar. Mir war nicht klar, dass es keine Verbindung zwischen ihnen gab. Danke für die Antwort Pushkar +1.
Clint L
32

Die Klassen für die OOXML-Dateiformate (z. B. XSSF für XLSX) befinden sich in einer anderen Jar-Datei. Sie müssen das poi-ooxml-Glas zusammen mit den Abhängigkeiten dafür in Ihr Projekt aufnehmen

Sie können eine Liste aller Komponenten und deren Abhängigkeiten auf der POI - Website erhalten hier .

Was Sie wahrscheinlich tun möchten, ist das 3.11-Binärpaket herunterzuladen , das poi-ooxmlJAR daraus zu holen und die Abhängigkeiten im ooxml-libVerzeichnis. Importieren Sie diese in Ihr Projekt und Sie werden sortiert.

Wenn Sie Maven verwenden, finden Sie hier eine Liste der Artefakte, auf die Sie sich verlassen möchten, aber es möchte ungefähr so ​​aussehen:

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

Die Poi-Ooxml-Maven-Abhängigkeit zieht automatisch das Haupt-POI-JAR und die Abhängigkeiten für Sie ein. Wenn Sie mit Nicht-Tabellenkalkulationsformaten arbeiten möchten, möchten Sie auch von dem poi-scratchpadArtefakt abhängig sein , wie auf der Seite POI-Komponenten beschrieben

Gagravarr
quelle
10

Ich habe unten Inhalte in der App "build.gradle" hinzugefügt.

implementation 'org.apache.poi:poi:4.0.0'
implementation 'org.apache.poi:poi-ooxml:4.0.0'
Dang Thach Hai
quelle
es ist wirklich geholfen
Abror Esonaliyev
8

Wenn Sie Maven verwenden:

poi => poi-ooxml in artefaktId

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.12</version>
    </dependency>
Stéphane GRILLON
quelle
Ich würde vorschlagen, POI 3.12 final ( 3.12) anstelle der Beta zu verwenden
Gagravarr
6

Problem: Beim Importieren der Klasse "org.apache.poi.xssf.usermodel.XSSFWorkbook" wird ein Fehler in Eclipse angezeigt.

Lösung: Verwenden Sie diese Maven-Abhängigkeit, um dieses Problem zu beheben:

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

-Hari Krishna Neela

Hari Krishna Neela
quelle
2

1) importierte alle JARS aus dem POI-Ordner 2) importierte alle JARS aus dem ooxml-Ordner, der ein Unterverzeichnis des POI-Ordners ist. 3) Importierte alle JARS aus dem lib-Ordner, der ein Unterverzeichnis des POI-Ordners ist

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
quelle
Zeile wird nicht importiert ... können Sie den Link zur JAR-Datei bitte freigeben
Demo
1

Ich hatte das gleiche Problem, also habe ich die Datei poi-3.17.jar durchgesehen und es war kein xssf-Paket darin.

Ich ging dann die anderen Dateien durch und fand xssf im poi-ooxml-3.17.jar

Es scheint also, dass die Lösungen hinzugefügt werden müssen

poi-ooxml-3.17.jar

zu Ihrem Projekt, da es zu funktionieren scheint (zumindest für mich)

Herr Redstoner
quelle
0

Sie haben die Umgebung sowieso nicht beschrieben, Sie sollten Apache Poi-Bibliotheken herunterladen. Wenn Sie Eclipse verwenden, klicken Sie mit der rechten Maustaste auf Ihr Stammprojekt. Fügen Sie also im Java-Erstellungspfad ein externes JAR hinzu und importieren Sie die folgenden Bibliotheken in Ihr Projekt:

xmlbeans-2.6.0; poi-ooxml-schemas- ...; poi-ooxml- ...; poi- ....;

frank
quelle
0

Ich brauchte die folgenden Dateien für meine Implementierung:

  • poi-ooxml-schemas-3.14.20160307.jar
  • commons-codec-1.10.jar (dies war im Ordner "lib" der Zip-Datei, die Sie von Apache erhalten)
  • kurvenapi-1.03.jar (im Ordner "ooxml-lib")
  • poi-3.14-20160307.jar
  • poi-ooxml-3.14-20160307.jar
  • xmlbeans-2.6.0.jar (im Ordner "ooxml-lib")

(Obwohl ich ehrlich gesagt nicht ganz sicher bin, ob sie alle notwendig sind ...) Es ist ein wenig verwirrend, weil sie so verpackt sind. Ich musste sie manuell in meinem eigenen "lib" -Ordner ablegen und dann die Referenzen hinzufügen ...

Maven scheint immer mehr herunterzuladen, als ich brauche, also platziere ich Bibliotheken / DLLs und ähnliches immer manuell.

pcalkins
quelle
Apache POI bietet eine praktische Seite, auf der erklärt wird, welche Gläser für was benötigt werden , und alles, was Sie benötigen, ist im binären Download enthalten, sodass es nicht verwirrend oder rätselhaft sein muss!
Gagravarr
Diese Seite ist praktisch, wenn Sie Maven verwenden möchten, aber ich ziehe es vor, Abhängigkeiten manuell hinzuzufügen. Die Seite listet nicht alles separat auf. Einige von ihnen sind zur Erstellungszeit nicht erkennbar, aber Sie finden sie, indem Sie zur Laufzeit Ausnahmen überprüfen. Meine Implementierung importiert XLS- und XLSX-Dateien in eine jtable. Das Obige schien alles zu sein, was dafür erforderlich war.
PCalkins
1
Alles, was dort aufgeführt ist, wird im binären Download geliefert! Sowohl welche Gläser die Komponenten benötigen, als auch welche Abhängigkeiten die Gläser benötigen
Gagravarr
0

Nachdem Sie mehrere Dinge ausprobiert hatten, funktionierte Folgendes: 1. Manuelles Herunterladen von "poi" und "poi-ooxml" 2. Hinzufügen dieser D / W-Gläser zu "Maven Dependencies"

Sanchi Tyagi
quelle