2013-10-02 9 views
11

Ich muss eine Methode erstellen, die xls und xlsx-Dateien lesen kann. Nach meinen Recherchen wird HSSF zum Lesen von xls und XSSF zum Lesen von xlsx verwendet. Gibt es einen Teil des Apache POIs, mit dem ich beide Dateien lesen kann? Ich stieß auch auf das s.usermodel, fand aber keine ausreichenden Codes, die sowohl xls als auch xlsx unterhalten würden.Gibt es eine Möglichkeit, sowohl .xls- als auch .xlsx-Dateien mit Apache POI zu lesen?

+0

WorkbookFactory.create verwenden können() muss die akzeptiert werden Antworten. http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html –

Antwort

14

Ich hatte nicht viel exp mit Apache POI, aber soweit ich weiß, wenn Sie auf eine beziehen Arbeitsmappe nach Klasse "Arbeitsmappe" dann können Sie beide xls & xlsx lesen und schreiben.

Alles, was Sie tun müssen, ist, wenn das Objekt Erstellen von WTT

für .xls-

Workbook wb = new HSSFWorkbook(); 

für .xlsx-

Workbook wb = new XSSFWorkbook(); 

Sie einen Parameter für Dateityp passieren kann und erstellen das WorkBook-Objekt verwendet entsprechend die If-Anweisung.

+0

Hallo! Ich habe auch die genannten Codes im Hinterkopf und ich plante, diese zu verwenden, wenn ich keine andere Möglichkeit finde, die Dateierweiterung zu erkennen. –

+0

Ich empfehle Ihnen, dieses grundlegende Dienstprogramm zu überprüfen, um alle Excel-Dateien zu lesen: https://github.com/eaorak/excelr – noego

1

eine Option wäre, den Dateinamen mit lastIndexOf zu überprüfen. und sehen Sie, ob es .xls oder xlsx ist und verwenden Sie dann eine if-Bedingung, um entsprechend zu wechseln. war eine lange Zeit, seit ich an poi arbeitete, aber ich denke, es sind die Attribute wie HSSF für .xls und XSSF für .xlsx verweisen http://poi.apache.org/ Website, letzte Zeile unter dem Thema Warum sollte ich Apache POI verwenden?

+0

danke für die Antwort! Ich werde versuchen, Ihre Antwort zu erwägen –

0

Es scheint, Sie suchen nach einer Möglichkeit, den Lesevorgang zu abstrahieren, Sie sagen, es spielt keine Rolle, ob seine XLS oder XLSX, möchten Sie Ihren Code ohne Änderung arbeiten.

Ich würde Ihnen empfehlen, sich anzuschauen, es ist eine wunderbare Bibliothek, die das Lesen von Dateien und das Parsen von Inhalten abstrahiert, POI und viele andere Bibliotheken verwendet und eine schöne Abstraktion zu allen hat.

Lesen eines PDF/XLS/XLSX ist ähnlich wie das Lesen einer Textdatei, die ganze Arbeit wird hinter der Szene getan.

lesen Sie das für mehr. http://www.searchworkings.org/blog/-/blogs/introduction-to-apache-tika

+0

Vielen Dank für das Vorschlagen von Apache Tika, es ist das erste Mal, dass ich darüber gelesen habe. Ich werde das untersuchen und es mit Apache POI vergleichen –

+0

Tika verwendet POI und viele andere Bibliotheken, es ist eine Abstraktion für alle, kein Ersatz. –

18

Ja, es gibt einen neuen Satz von Schnittstellen, die von POI bereitgestellt werden und mit beiden Typen arbeiten.

Verwenden Sie die WorkbookFactory.create() -Methode eine Arbeitsmappe zu erhalten: http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html

Sie für Excel-Dateien überprüfen können, ohne sich auf Dateierweiterungen (die sind unzuverlässig - viele csv-Dateien xls Erweiterungen zum Beispiel, aber kann nicht analysiert werden nach POI) unter Verwendung der folgenden:

+0

Hallo! Danke für diesen Code, den du gepostet hast. Ich finde es besser als die langen Codes, die ich ausprobiert habe. –

+0

.doc wird diese Prüfung bestehen – gstackoverflow

3

Dank Toms Antwort nur hinzufügen, verwenden Sie Foll. Code erhalten Input sonst können wir Exception in thread "main" java.io.IOException: mark/reset not supported

 InputStream inputStream = new FileInputStream(new File("C:\\myFile.xls")); 

    if(! inputStream.markSupported()) { 
       inputStream = new PushbackInputStream(fileStream, 8); 
    } 
+0

nice one. guter Fang! – tom

7

Gesicht können Sie von Apache zur Verfügung stellt Gläser poi-OOXML und Poi-OOXML-Schema gelesen werden.

und Code unten verwenden: -

Workbook wb = null; 
excelFileToRead = new FileInputStream(fileName); 
wb = WorkbookFactory.create(excelFileToRead); 
Sheet sheet = wb.getSheet(sheetName); 

der obige Code wird sowohl xls lesen und XLSX-Dateien

1

Sie

Workbook wb = WorkBookFactory().create(inputStream); 
+0

Die Verwendung einer 'Datei' ist im Allgemeinen besser, siehe http://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream – Gagravarr

Verwandte Themen