使用Apache POI读取XLSX文件时出现异常

时间:2016-04-08 14:46:32

标签: java exception apache-poi xlsx xmlbeans

我目前正在与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,我几乎觉得我可能需要找到一个旧版本,因为它说缺少一种方法。我不确定是否有替代/更简单的方法来读取XLSX,或者在处理任何数据之前简单地将其转换为CSV。

1 个答案:

答案 0 :(得分:5)

您需要将XMLBeans版本升级到2.6,或者将Apache POI版本升级到3.15 beta 1或更高版本。

您正在点击Apache POI bug #59195,其中一个月前已应用了临时解决方法,并且已包含在3.15 beta 1版本中。 (也是从提交之后的夜间构建)。完整修复需要更长时间,如果您有兴趣,请关注该错误!