java - 使用 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常用框架省略
解决方案
推荐阅读
- reactjs - TypeScript:“RefObject”类型上不存在“getContext”
' - javascript - NodeJS - 在 Windows 上解析另一个 JSON 中的 JSON 字符串时出现问题
- python - 守护程序目标函数在 Python 中不接受字符串参数
- json - 在 Spring 中使用占位符加载 Json
- typescript - vscode 中的 Aspnet 核心构建管道,尤其是 typescript - 2020 年
- c# - 按需从另一个类和方法中获取变量
- vue.js - 如何在Vue按钮中注册id div?
- pine-script - Pine Script - 第一个栏的背景颜色
- django - Django - 根据数据库中的值显示静态文件夹中的图像
- kubernetes - Fluxcd 的 os linux 的 Nodeselector 未在 Helm 部署中应用