首页 > 解决方案 > 使用 apache-poi 读取 xlsx 文件时出现问题

问题描述

我在读取 xlsx 文件时遇到了一个奇怪的错误,在我的 Windows 计算机上我没有问题,而是在 heroku 上它给了我以下错误:无法解析共享字符串表。显然我尝试读取的文件是相同的。

我的代码:

private fun readExcelContent(file: InputStream): Sequence<Row> {
    val pkg = OPCPackage.open(file)
    pkg.use {
        val reader = XSSFReader(pkg)
        val sst = reader.sharedStringsTable
        val parser = XMLHelper.newXMLReader()
        val handler = ExcelSheetHandler(sst)
        parser.contentHandler = handler
        val sheet = reader.sheetsData.next()
        val source = InputSource(sheet)
        try {
            parser.parse(source)
        } catch (e: ConsecutiveBlanksException) {
            logger.info("The file contained several consecutive blank lines that have been skipped.")
        }

        return handler.content.asSequence()
    }
}

堆栈跟踪:

2 月 16 日 21:56:15.622 scheduler.1 at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) ~[na:na] 2 月 16 日 21:56 :15.622 scheduler.1 at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400) ~[na:na] Feb 16 21:56:15.622 scheduler.1在 java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178) ~[na:na] Feb 16 21:56:15.622 scheduler.1 at java.xml/ com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204) ~[na:na] Feb 16 21:56:15.622 scheduler.1 由:org.xml.sax.SAXParseException : 元素类型“t”必须以匹配的结束标签“”结束。2 月 16 日 21:56:15.622 scheduler.1 ... 2 月 16 日 21:56:15 省略了 36 个公共帧。na] 2 月 16 日 21:56:15.622 scheduler.1 原因:org.apache.xmlbeans.XmlException:错误:元素类型“t”必须由匹配的结束标记“”终止。2 月 16 日 21:56:15.622 scheduler.1 ... 省略了 34 个常见帧 2 月 16 日 21:56:15.622 scheduler.1 at org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:61) ~[poi- ooxml-4.1.2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 在 org.apache.poi.xssf.model.SharedStringsTable.(SharedStringsTable.java:111) ~[poi-ooxml- 4.1.2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 在 org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:134) ~[poi-ooxml-4.1 .2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 原因:java.io.IOException: 无法解析共享字符串表 2 月 16 日 21:56:15.622 scheduler.1 ... 29常用框架省略 1 原因:org.apache.xmlbeans.XmlException:错误:元素类型“t”必须由匹配的结束标记“”终止。2 月 16 日 21:56:15.622 scheduler.1 ... 省略了 34 个常见帧 2 月 16 日 21:56:15.622 scheduler.1 at org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:61) ~[poi- ooxml-4.1.2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 在 org.apache.poi.xssf.model.SharedStringsTable.(SharedStringsTable.java:111) ~[poi-ooxml- 4.1.2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 在 org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:134) ~[poi-ooxml-4.1 .2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 原因:java.io.IOException: 无法解析共享字符串表 2 月 16 日 21:56:15.622 scheduler.1 ... 29常用框架省略 1 原因:org.apache.xmlbeans.XmlException:错误:元素类型“t”必须由匹配的结束标记“”终止。2 月 16 日 21:56:15.622 scheduler.1 ... 省略了 34 个常见帧 2 月 16 日 21:56:15.622 scheduler.1 at org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:61) ~[poi- ooxml-4.1.2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 在 org.apache.poi.xssf.model.SharedStringsTable.(SharedStringsTable.java:111) ~[poi-ooxml- 4.1.2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 在 org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:134) ~[poi-ooxml-4.1 .2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 原因:java.io.IOException: 无法解析共享字符串表 2 月 16 日 21:56:15.622 scheduler.1 ... 29常用框架省略 元素类型“t”必须以匹配的结束标签“”结束。2 月 16 日 21:56:15.622 scheduler.1 ... 省略了 34 个常见帧 2 月 16 日 21:56:15.622 scheduler.1 at org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:61) ~[poi- ooxml-4.1.2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 在 org.apache.poi.xssf.model.SharedStringsTable.(SharedStringsTable.java:111) ~[poi-ooxml- 4.1.2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 在 org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:134) ~[poi-ooxml-4.1 .2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 原因:java.io.IOException: 无法解析共享字符串表 2 月 16 日 21:56:15.622 scheduler.1 ... 29常用框架省略 元素类型“t”必须以匹配的结束标签“”结束。2 月 16 日 21:56:15.622 scheduler.1 ... 省略了 34 个常见帧 2 月 16 日 21:56:15.622 scheduler.1 at org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:61) ~[poi- ooxml-4.1.2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 在 org.apache.poi.xssf.model.SharedStringsTable.(SharedStringsTable.java:111) ~[poi-ooxml- 4.1.2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 在 org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:134) ~[poi-ooxml-4.1 .2.jar!/:4.1.2] 2 月 16 日 21:56:15.622 scheduler.1 原因:java.io.IOException: 无法解析共享字符串表 2 月 16 日 21:56:15.622 scheduler.1 ... 29常用框架省略

标签: javakotlinherokuapache-poixlsx

解决方案


推荐阅读