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

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

我没有太多与Apache POI exp,但据我所知,如果你通过类“工作簿”引用工作簿,那么你可以读写xls&xlsx。

所有你需要做的是创build对象写入

.xls-

Workbook wb = new HSSFWorkbook(); 

.xlsx-

 Workbook wb = new XSSFWorkbook(); 

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

是的,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-ooxml和poi-ooxml-schema jar。

并使用下面的代码: –

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

上面的代码将读取xls和xlsx文件

感谢汤姆的回答只是添加,使用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); } 

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

您可以使用

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

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

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

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

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