【发布时间】:2019-08-10 16:57:14
【问题描述】:
问题:
我只是尝试使用 Apache-poi 4.1.0 库打开它的 .xls 文件,它在 similar question 中给出了与 4 年前相同的错误。
我已经试过了
放版本 3.12-3.16。
所有版本都可以打开空白.xls并由我自己填写,但不是这个。
此文档是自动生成的,我需要制作一个接受它的程序。
我已经制作了一个可用的 .Net 标准库 C#,我尝试使用 xamarin android,这太可怕了,由于各种可怕的 SDK 链接错误,该应用程序的重量为 50 mb vs 3 mb,但那是另一回事.所以我决定在 Kotlin 上做。
代码来自documentation 可以查看file on git
val inputStream = FileInputStream("./test.xls")
val wb = HSSFWorkbook(inputStream)
我希望在打开 xls 时不会出错。
实际输出为
Exception in thread "main" java.lang.RuntimeException: Unexpected record type (org.apache.poi.hssf.record.HyperlinkRecord)
at org.apache.poi.hssf.record.aggregates.RowRecordsAggregate.<init>(RowRecordsAggregate.java:97)
at org.apache.poi.hssf.model.InternalSheet.<init>(InternalSheet.java:183)
at org.apache.poi.hssf.model.InternalSheet.createSheet(InternalSheet.java:122)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:354)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:400)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:381)
at ru.plumber71.toolbox.ExcelParcerKt.main(ExcelParcer.kt:19)
at ru.plumber71.toolbox.ExcelParcerKt.main(ExcelParcer.kt)
不会以任何方式修改文档。如果有任何其他库可以从 .xls 文件中读取数据集或字符串就可以了。
【问题讨论】:
-
您的文件已损坏。正如错误所述,在不应该出现的地方有一个
HyperlinkRecord。Excel可能有足够的容忍度来打开该文件。但是你不能指望apache poi也试图容忍所有可能的文件格式违规。如果我使用Excel打开文件然后重新保存它,apache poi之后就可以创建Workbook。 -
@AxelRichter 我很高兴收到您的评论。谢谢你,它确实有效。但是这个文件每天几次来自组织,我想自动化这个过程。 (重新保存excel文件/修复文件)。奇怪的是.net library可以打开它。我在另一个具有相同文件的项目中使用它可能没有错误,因为它不提供任何格式化功能。 Java有类似的东西吗?我只需要阅读它。
标签: java excel kotlin apache-poi xls