簡體   English   中英

有沒有辦法使用Apache POI讀取.xls和.xlsx文件?

[英]Is there any way to read both .xls and .xlsx files using Apache POI?

我需要創建一個可以讀取xls和xlsx文件的方法。 根據我的研究,HSSF用於讀取xls和XSSF以讀取xlsx。 我可以使用Apache POI的一部分來讀取這兩個文件嗎? 我也遇到了ss.usermodel,但發現沒有足夠的代碼來娛樂xls和xlsx ....

是的,POI提供了一組新的接口,可以同時使用這兩種類型。

使用WorkbookFactory.create()方法獲取工作簿: http//poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html

您可以使用以下方法檢查excel文件,而不依賴於文件擴展名(不可靠 - 許多csv文件具有xls擴展名,但不能由POI解析):

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

我對Apache POI沒有太多的exp,但據我所知,如果你按類“Workbook”引用工作簿,那么你可以讀寫xls和xlsx。

您所要做的就是創建對象寫入時

對於.xls-

Workbook wb = new HSSFWorkbook();

對於.xlsx-

Workbook wb = new XSSFWorkbook();

您可以傳遞文件類型的參數,並使用If語句相應地創建WorkBook對象。

你可以使用apache提供的poi-ooxml和poi-ooxml-schema jar來閱讀。

並使用以下代碼: -

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

上面的代碼將讀取xls和xlsx文件

感謝Tom的回答只是為了添加,請使用foll。 獲取輸入流的代碼我們可能Exception in thread "main" java.io.IOException: mark/reset not supported遇到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);
     }   

您可以使用

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

一個選項是使用lastIndexOf檢查文件名。 並查看它是否是.xls或xlsx然后使用if條件進行相應切換。 自從我工作poi以來已經很長時間了,但我認為它的屬性就像.xls的HSSF和.xlsx的XSSF參考http://poi.apache.org/網站,主題下的最后一行我為什么要使用Apache POI ?

看來你正在尋找一種抽象讀取過程的方法,你說它的XLS或XLSX無關緊要,你希望你的代碼無需修改即可工作。

我建議你看看Apache Tika ,它是一個很棒的庫,它提取文件閱讀和內容解析,它使用POI和許多其他庫,並且對所有這些庫都有很好的抽象。

閱讀PDF / XLS / XLSX類似於閱讀文本文件,所有工作都在幕后完成。

閱讀本文了解更多。 http://www.searchworkings.org/blog/-/blogs/introduction-to-apache-tika

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM