繁体   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