有没有办法使用Apache POI读取.xls和.xlsx文件?

时间:2013-10-02 04:21:27

标签: java excel apache-poi

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

7 个答案:

答案 0 :(得分:19)

是的,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));
}

答案 1 :(得分:17)

我对Apache POI没有多少exp,但据我所知,如果你按类“Workbook”引用工作簿,那么你可以读写xls& XLSX。

您所要做的就是创建对象写入

表示.xls -

Workbook wb = new HSSFWorkbook();

表示.xlsx -

Workbook wb = new XSSFWorkbook();

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

答案 2 :(得分:10)

你可以使用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文件

答案 3 :(得分:3)

感谢Tom的回答,只需添加,请使用foll。用于获取输入流的代码我们可能面临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);
     }   

答案 4 :(得分:2)

您可以使用

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

答案 5 :(得分:1)

一个选项是使用lastIndexOf检查文件名。并查看它是否是.xls或xlsx然后使用if条件进行相应切换。 自从我工作poi以来已经有很长一段时间,但我认为它的属性就像.xls的HSSF和.xlsx的XSSF 请参阅http://poi.apache.org/网站,该主题下的最后一行 我为什么要使用Apache POI?

答案 6 :(得分:0)

看来你正在寻找一种抽象读取过程的方法,你说它无论是XLS还是XLSX都没关系,你希望你的代码无需修改即可工作。

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

阅读PDF / XLS / XLSX类似于阅读文本文件,所有工作都在幕后完成。

阅读此内容以获取更多信息。 http://www.searchworkings.org/blog/-/blogs/introduction-to-apache-tika