2013-10-02 76 views
11

我需要创建一个可以读取XLS和XLSX文件的方法。根据我的研究,HSSF用于读取xls和XSSF来读取xlsx。是否有可用于读取这两个文件的Apache POI的一部分?我也遇到了ss.usermodel,但没有发现足够的代码,可以同时支持xls和xlsx ......有什么方法可以使用Apache POI来读取.xls和.xlsx文件?

+0

WorkbookFactory.create()必须接受回答。 http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html –

回答

14

我还没有用Apache POI进行太多的实验,但据我所知如果你提到一个工作簿按类“工作簿”,那么你可以读写xls & xlsx。

所有你需要做的就是为.xls-

Workbook wb = new HSSFWorkbook(); 

当创建对象的写

为.xlsx-

Workbook wb = new XSSFWorkbook(); 

你可以传递参数的文件类型和创建WorkBook对象相应地使用If语句。

+0

你好!我也记住了上述代码,如果找不到其他方式来检测文件扩展名,我打算使用这些代码。 –

+0

我建议你检查这个基本工具来阅读所有的excel文件:https://github.com/eaorak/excelr – noego

1

一个选择是与lastIndexOf检查文件名。并查看它是.xls还是xlsx,然后使用if条件进行相应切换。 已经很长时间了,因为我工作在poi但我认为它的属性就像HSSF .xls和XSSF为.xlsx 参考http://poi.apache.org/网站,最后一行在主题 为什么要使用Apache POI?

+0

谢谢你的答案!我会尽量考虑你的回答 –

0

看样子你正在寻找一种方式来抽象的读取过程,你说如果XLS或XLSX,你希望你的代码,而无需修改也没有关系。

我建议你看看Apache Tika,它是一个抽象文件阅读和内容解析的优秀库,它使用POI和许多其他库,并且对它们都有很好的抽象。

阅读PDF/XLS/XLSX类似于读取文本文件,所有的工作都是在幕后进行。

阅读更多。 http://www.searchworkings.org/blog/-/blogs/introduction-to-apache-tika

+0

非常感谢你提供Apache Tika的建议,这是我第一次读到这个。我会研究这一点,并将其与Apache POI –

+0

进行比较。Tika使用POI和许多其他库,它是对所有这些库的抽象,而不是替代品。 –

18

是的,有一组新的,与这两种类型的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)); 
} 
+0

你好!感谢您发布的代码。我发现它比我尝试过的冗长代码更好。 –

+0

.doc将通过这个检查 – gstackoverflow

3

感谢汤姆的答案只是添加,使用foll。代码来获得的InputStream否则,我们可能会面临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

不错的一个。接得好! – tom

7

你可以阅读使用的Apache POI提供,OOXML和POI-OOXML-模式罐子。

,并使用下面的代码: -

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

上面的代码将同时读取XLS和XLSX文件

1

您可以使用

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

使用'File'通常更好,请参阅http://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream – Gagravarr

相关问题