2013-10-02 23 views
11

Potrzebuję stworzyć metodę, która może odczytać zarówno pliki xls, jak i xlsx. Zgodnie z moimi badaniami, HSSF jest używany do odczytu xls i XSSF do odczytu xlsx. Czy istnieje część Apache POI, której mogę użyć do odczytania obu plików? Natknąłem się również na ss.usermodel, ale nie znalazłem wystarczających kodów, które zabawiłyby zarówno xls, jak i xlsx ....Czy istnieje sposób odczytu plików .xls i .xlsx przy użyciu Apache POI?

+0

WorkbookFactory.create() musi być zaakceptowana odpowiedź. http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html –

Odpowiedz

14

Nie miałem dużo expów z Apache POI, ale o ile wiem, jeśli odnosisz się do skoroszyt po klasie "Workbook", możesz czytać i pisać zarówno xls & xlsx.

Wszystko co musisz zrobić, to podczas tworzenia obiektu pisać

dla .xls-

Workbook wb = new HSSFWorkbook(); 

dla .xlsx-

Workbook wb = new XSSFWorkbook(); 

można przekazać parametr do typu pliku i utworzyć obiekt WorkBook zgodnie z instrukcją If.

+0

Witam! Też mam na myśli te kody i planowałem je wykorzystać, jeśli nie mogę znaleźć innego sposobu na wykrycie rozszerzenia pliku. –

+0

Polecam sprawdzić to podstawowe narzędzie, aby przeczytać wszystkie pliki Excel: https://github.com/eaorak/excelr – noego

1

jedną z opcji byłoby sprawdzenie nazwy pliku z lastIndexOf dla. i zobacz, czy to jest .xls lub xlsx, a następnie użyj warunku if, aby odpowiednio zmienić. od dłuższego czasu pracowałem nad poi, ale myślę, że atrybuty są jak HSSF dla .xls i XSSF dla .xlsx referować na stronę http://poi.apache.org/, ostatnia linia pod tematem Dlaczego powinienem używać Apache POI?

+0

dzięki za odpowiedź! Spróbuję rozważyć twoją odpowiedź –

0

Wygląda na to, że szukasz sposobu na streszczenie procesu odczytu, mówisz, że nie ma znaczenia, czy jego XLS czy XLSX, chcesz aby twój kod działał bez modyfikacji.

Polecam, aby przejrzeć Apache Tika, jego niesamowitą bibliotekę, która pobudza czytanie plików i parsowanie zawartości, wykorzystuje punkty POI i wiele innych bibliotek i ma ładną abstrakcję dla nich wszystkich.

czytanie pliku PDF/XLS/XLSX jest podobne do czytania pliku tekstowego, cała praca wykonywana jest za sceną.

przeczytaj to, aby uzyskać więcej informacji. http://www.searchworkings.org/blog/-/blogs/introduction-to-apache-tika

+0

Dziękuję bardzo za sugestię Apache Tika, o której pierwszy raz czytam. Zajmę się tym i porówna go z Apache POI –

+0

Tika używa punktów POI i wielu innych bibliotek, jest abstrakcją dla nich wszystkich, a nie zamiennikiem. –

18

Tak, istnieje nowy zestaw interfejsów udostępnianych przez POI, które działają z obydwoma typami.

Zastosowanie metody WorkbookFactory.create(), aby uzyskać skoroszytu: http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html

można sprawdzić plików excel bez polegania na rozszerzeń plików (które są zawodne - wiele plików csv mają rozszerzenia xls na przykład, ale nie może być analizowany według POI), używając:

//simple way to check for both types of excel files 
public boolean isExcel(InputStream i) throws IOException{ 
    return (POIFSFileSystem.hasPOIFSHeader(i) || POIXMLDocument.hasOOXMLHeader(i)); 
} 
+0

Hello! Dziękujemy za przesłany przez Ciebie kod. Uważam, że to lepsze niż długie kody, które próbowałem. –

+0

.doc przejdzie tę kontrolę – gstackoverflow

3

Dzięki odpowiedzi Toma, aby dodać, użyj foll. Kod uzyskać InputStream jeszcze możemy zmierzyć 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. dobry połów! – tom

7

można odczytać za pomocą POI-OOXML i poi-OOXML-schematu słoiki dostarczone przez Apache.

i skorzystać z poniższego kodu: -

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

powyższy kod będzie czytać zarówno xls i xlsx pliki

1

Można użyć

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

Używanie "pliku" jest ogólnie lepsze, zobacz http://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream – Gagravarr

Powiązane problemy