2015-11-13 8 views
6

ich Apache POI bin mit lesen und Zeichnet Dateien mit Java zu schreiben, aber ich bin nicht in der Lage WorkbookFactory noch XSSFWorkbook in den Quellen zu finden xlsx zu lesen Dateien.Apache Poi 3.13 können keine Klassen finden XLSX-Dateien öffnen

pom.xml:

<poi.version>3.13</poi.version> 
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi</artifactId> 
    <version>${poi.version}</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml</artifactId> 
    <version>${poi.version}</version> 
</dependency> 

Ich kann nicht weder irgendwelche Informationen im Changelog von Apache POI finden, die zu diesem Verhalten führen könnte.

bearbeiten: Hier meine Implementierung (nur eine einfache Methode für den Moment)

public static HSSFSheet getXLSSheet(String fileName, int sheetIndex) throws IOException { 
    InputStream inputStream = new FileInputStream(fileName); 
    HSSFWorkbook workbook = new HSSFWorkbook(inputStream); 
    return workbook.getSheetAt(sheetIndex); 
} 

Ich habe versucht, eine XLSX-Datei zu öffnen, aber da kann ich nicht die beiden anderen Klassen (WorkbookFactory oder XSSFWorkbook finden) ich habe einen Fehler haben, wie diese erwartet:

org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF) 

Vielen Dank im Voraus.

Antwort

3

Erstens, ich kann Ihnen versichern, dass die WorkbookFactory und XSSFWorkbook Klassen in den POI-OOXML 3,13 Gläser enthalten sind, als documented on the POI site

$ unzip -l .m2/repository/org/apache/poi/poi-ooxml/3.13/poi-ooxml-3.13.jar | grep WorkbookFactory 
    6041 2015-09-22 00:22 org/apache/poi/ss/usermodel/WorkbookFactory.class 

Da jedoch die Ausnahme, die Sie gebucht haben klar macht, Ihr Code nie für XLSX Dateien arbeiten, muss es geändert werden. Nun, für diese und einige auch andere Probleme ... zB Don't use an InputStream if you have a File

Der Code sollte stattdessen mehr wie:

import java.io.File; 
import org.apache.poi.ss.usermodel.*; 

public static Sheet getExcelSheet(String fileName, int sheetIndex) throws IOException { 
    File file = new File(fileName); 
    Workbook workbook = WorkbookFactory.create(file); 
    return workbook.getSheetAt(sheetIndex); 
} 

, die für beide xls und xlsx Dateien arbeiten, und wird niedriger sein als Speicher verwenden ein Eingabestrom Solange Sie sagen, Maven abhängig von der poi-ooxml jar, erhalten Sie alle anderen Abhängigkeiten, die Sie automatisch benötigen

+0

Ich wusste, dass es nicht funktionieren würde. Aber danke, um herauszufinden, dass es in der Version 3.13 ist. Ich habe herausgefunden, dass es einen Fehler mit der IDE gab, für einige, wie die Abhängigkeit nicht geladen wurde. Jetzt funktioniert alles gut.Ich habe auch die Datei anstelle von InputStream geändert (aber zu Testzwecken habe ich den schnellsten Weg versucht) – Sqrt

0

Das XSSFWorkbook präsentiert in Version 3.11 von Apache POI.

Source code of apache POI

Versuchen Sie, diese Version von Apache Poi zu verwenden.

Außerdem ist es noch im Kofferraum:

Source code of apache POI

Ich glaube, das Problem ist, mit Ihnen lokalen Speicher maven. Versuchen Sie, poi folderes aus lokalem Maven-Repository zu entfernen und Abhängigkeiten neu zu laden.

Versuchen Sie auch nicht zu vergessen, alle Anruf HSSFWorkbook-XSSFWorkbook zu ändern, da XLSX Dateien nur über XSSFWorkbook öffnet.