我使用apache POI用Java读取和写入Excels的文件,但是我无法在源代码中找到 WorkbookFactory 或 XSSFWorkbook 来读取xlsx文件 .
pom.xml :
<poi.version>3.13</poi.version>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
我在apache poi的更改日志中找不到任何可能导致此行为的信息 .
Edit :这是我的实现(暂时只是一个简单的方法)
public static HSSFSheet getXLSSheet(String fileName, int sheetIndex) throws IOException {
InputStream inputStream = new FileInputStream(fileName);
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
return workbook.getSheetAt(sheetIndex);
}
我试图打开一个XLSX文件,但由于我找不到其他两个类(WorkbookFactory或XSSFWorkbook),我应该有这样的错误:
org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
提前致谢 .
2 回答
首先,我可以向您保证
WorkbookFactory
和XSSFWorkbook
类包含在POI-OOXML 3.13 jar 中,如documented on the POI site但是,正如您发布的例外情况所表明的那样,您的代码永远不会用于
XLSX
文件,它需要更改 . 好吧,为此以及其他一些问题......例如Don't use an InputStream if you have a File您的代码应该更像是:
这对于
xls
和xlsx
文件都有效,并且比使用输入流的内存更低 . 只要你告诉maven依赖于poi-ooxml
jar,你就会自动获得所需的所有其他依赖项XSSFWorkbook提供了3.11版本的Apache POI .
Source code of apache POI
尝试使用此版本的apache poi .
此外,它仍然存在于主干:
Source code of apache POI
我相信问题在于你maven本地存储 . 尝试从maven本地存储库中删除poi folederes并重新下载依赖项 .
另外,请尽量不要忘记将
HSSFWorkbook
的所有调用更改为XSSFWorkbook
,因为 XLSX 文件仅通过XSSFWorkbook
打开 .