java - Apache POI HSSF XLS 读取错误

标签 java excel apache-poi

在读取 .xls 文件时使用以下代码,其中 s 是文件目录:

InputStream input = new FileInputStream(s);
Workbook wbs = new HSSFWorkbook(input);

我收到以下错误消息:

Exception in thread "main" java.io.IOException: Invalid header signature; read 0x0010000000060809, expected 0xE11AB1A1E011CFD0

我需要一个能够读取 XLSX 或 XLS 的程序,并且使用刚刚针对 XSSF 调整的完全相同的代码,它在读取 XLSX 文件时完全没有问题。

最佳答案

您得到的异常是告诉您您提供的文件不是有效的 Excel 二进制文件,至少不是自 1990 年左右以来生成的有效 Excel 文件。您得到的异常告诉您什么POI 预计,它发现了其他东西,而不是有效的 .xls 文件,并且不是 POI 可以检测到的任何其他东西。

需要注意的是,Excel 可以打开多种不同的文件格式,包括 .csv 和 .html。它对文件扩展名也不是很挑剔,所以很乐意打开一个已重命名为 .xls 的 CSV 文件。然而,由于将 .csv 重命名为 .xls 并没有神奇地改变格式,POI 仍然无法打开它!

.

从异常中,我可以看出发生了什么,而且我还可以看出您使用的是旧版本的 Apache POI! 0x0010000000060809 的 header 签名对应于大约 25 年前的 Excel 4 文件格式!如果您使用较新版本的 Apache POI,它会给您一条有用的错误消息,告诉您所提供的文件是旧的且基本上不受支持的 Excel 文件。新版本的 POI 确实包括 OldExcelExtractor tool它可以从那些古老的格式中提取一些信息。

否则,与所有此类异常(exception)情况一样,请尝试在 Excel 中打开文件并另存为。这将使您了解文件当前是什么(例如,.html 另存为 .xls,.csv 另存为 .xls 等),并且还可以让您将其重新保存为适当的 .xls 文件,以便 POI 加载和一起工作。

关于java - Apache POI HSSF XLS 读取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10790136/

相关文章:

java - 使用 Apache POI 更改 Excel 折线图中的数据范围

java - Apache POI Java 的缺失单元策略

java - maven构建失败时如何停止批处理

java - 如何在 Java 中执行 Ruby 文件?

java - Camel Junit 调试 EndpointInject 的 Autowiring ,它是空的

sql-server - 使用 Excel 2016 作为源

excel - instr 函数中的逗号是什么意思?

java - 属性文件未加载和更新相对路径,但对于绝对路径工作正常

c# - 如何加快从 C# 创建 excel Excel 电子表格的速度?

java - Angular2 - 下载从 RestService 收到的 XLS