使用 Apache POI 读取 XLSX 文件时出现异常
Exception when using Apache POI to read XLSX file
我目前正在使用 Apachi,因为我需要从 XLSX 文件中读取数据,稍后会将其转换为 CSV。这是我用来创建 XSSFWorkbook 的代码,它每次都会导致异常。据我所知,XMLBeans 是部分原因。它已被弃用,但是,在这种情况下它是 POI 的依赖项。
public static void appendCSV(File inputFile, String outputFile, String tag)
{
System.out.println(inputFile.getAbsolutePath());
InputStream inp = null;
try {
inp = new FileInputStream(inputFile);
XSSFWorkbook wb = new XSSFWorkbook(inp);
我的异常在上面块的最后一行抛出。
Exception in thread "main" org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
at org.apache.poi.POIXMLFactory.createDocumentPart(POIXMLFactory.java:65)
at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:601)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:174)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:279)
at BigBangarang.appendCSV(BigBangarang.java:68)
at BigBangarang.main(BigBangarang.java:268)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:56)
at org.apache.poi.POIXMLFactory.createDocumentPart(POIXMLFactory.java:62)
... 5 more
Caused by: java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setLoadEntityBytesLimit(I)Lorg/apache/xmlbeans/XmlOptions;
at org.apache.poi.POIXMLTypeLoader.<clinit>(POIXMLTypeLoader.java:50)
at org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:127)
at org.apache.poi.xssf.model.SharedStringsTable.<init>(SharedStringsTable.java:108)
... 11 more
有没有人运行遇到过这种情况?我有最新版本的 XMLBeans,我几乎觉得我可能需要找到一个旧版本,因为它说缺少一个方法。我不确定是否有 alternate/easier 方法来读取 XLSX,或者在处理任何数据之前将其简单地转换为 CSV。
您需要将 XMLBeans 版本升级到 2.6,或者将 Apache POI 版本升级到 3.15 beta 1 或更高版本。
您正在点击 Apache POI bug #59195,大约一个月前应用了一个临时解决方法,并包含在 3.15 beta 1 版本中。 (也是从提交开始的每晚构建中)。完整修复需要更长的时间,如果您有兴趣,请关注该错误!
我目前正在使用 Apachi,因为我需要从 XLSX 文件中读取数据,稍后会将其转换为 CSV。这是我用来创建 XSSFWorkbook 的代码,它每次都会导致异常。据我所知,XMLBeans 是部分原因。它已被弃用,但是,在这种情况下它是 POI 的依赖项。
public static void appendCSV(File inputFile, String outputFile, String tag)
{
System.out.println(inputFile.getAbsolutePath());
InputStream inp = null;
try {
inp = new FileInputStream(inputFile);
XSSFWorkbook wb = new XSSFWorkbook(inp);
我的异常在上面块的最后一行抛出。
Exception in thread "main" org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
at org.apache.poi.POIXMLFactory.createDocumentPart(POIXMLFactory.java:65)
at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:601)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:174)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:279)
at BigBangarang.appendCSV(BigBangarang.java:68)
at BigBangarang.main(BigBangarang.java:268)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:56)
at org.apache.poi.POIXMLFactory.createDocumentPart(POIXMLFactory.java:62)
... 5 more
Caused by: java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setLoadEntityBytesLimit(I)Lorg/apache/xmlbeans/XmlOptions;
at org.apache.poi.POIXMLTypeLoader.<clinit>(POIXMLTypeLoader.java:50)
at org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:127)
at org.apache.poi.xssf.model.SharedStringsTable.<init>(SharedStringsTable.java:108)
... 11 more
有没有人运行遇到过这种情况?我有最新版本的 XMLBeans,我几乎觉得我可能需要找到一个旧版本,因为它说缺少一个方法。我不确定是否有 alternate/easier 方法来读取 XLSX,或者在处理任何数据之前将其简单地转换为 CSV。
您需要将 XMLBeans 版本升级到 2.6,或者将 Apache POI 版本升级到 3.15 beta 1 或更高版本。
您正在点击 Apache POI bug #59195,大约一个月前应用了一个临时解决方法,并包含在 3.15 beta 1 版本中。 (也是从提交开始的每晚构建中)。完整修复需要更长的时间,如果您有兴趣,请关注该错误!