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 - 在 Android 上存储用户的 OAuth token 的标准/推荐/尽可能安全的做法是什么?

Java根据第一个数组的索引对第二个数组进行排序

vba - 宏未显示在运行宏菜单中

excel - 如何根据特定的列值将数据从一张纸拉到另外 3 张纸?

java - 新版本 POI 中缺少 poi-contrib-*.jar

java - Apache POI 中行的自动大小高度

java - 获取维基百科类别链接

java - 通过 HTTP POST 发送 xml 消息

将样式应用于单元格时出现 Excel VBA 粘贴错误

java - 在java中不使用excel来评估excel/其他语言表达式评估的库