Apache Poi 3.13找不到类来打开XLSX文件
我正在使用Apache POI来读取和写入Java的Excels文件,但是我无法在源文件中findWorkbookFactory或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>
我无法find可能导致这种行为的Apache poi更新日志中的任何信息。
编辑 :在这里我的实现(只是一个简单的方法)
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)
提前致谢。
首先,我可以向您保证,POI-OOXML 3.13jar子中包含WorkbookFactory
和XSSFWorkbook
类,如POI网站上所logging
$ unzip -l .m2/repository/org/apache/poi/poi-ooxml/3.13/poi-ooxml-3.13.jar | grep WorkbookFactory 6041 2015-09-22 00:22 org/apache/poi/ss/usermodel/WorkbookFactory.class
但是,由于您发布的exception很清楚,您的代码将永远不会用于XLSX
文件,因此需要更改。 那么,对于这个和其他一些问题呢…例如, 如果你有一个文件,不要使用InputStream
你的代码应该更像是:
import java.io.File; import org.apache.poi.ss.usermodel.*; public static Sheet getExcelSheet(String fileName, int sheetIndex) throws IOException { File file = new File(fileName); Workbook workbook = WorkbookFactory.create(file); return workbook.getSheetAt(sheetIndex); }
这将适用于xls
和xlsx
文件,并将比使用inputstream更低的内存。 只要你告诉maven依赖poi-ooxml
jar,你会得到你需要的所有其他依赖
XSSFWorkbook出现在Apache POI的3.11版本中。
apache POI的源代码
尝试使用这个版本的Apache poi。
此外,它仍然存在于后备箱:
apache POI的源代码
我相信这个问题是与你maven本地存储。 尝试从Maven本地存储库中删除poi folederes并重新下载依赖项。
另外,请尽量不要忘记将所有从HSSFWorkbook
调用到XSSFWorkbook
,因为XLSX文件只能通过XSSFWorkbook
打开。