首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache POI HSSF XLS读取错误

Apache POI HSSF XLS读取错误
EN

Stack Overflow用户
提问于 2012-05-29 04:31:48
回答 3查看 9.2K关注 0票数 3

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

代码语言:javascript
复制
InputStream input = new FileInputStream(s);
Workbook wbs = new HSSFWorkbook(input);

我得到以下错误消息:

代码语言:javascript
复制
Exception in thread "main" java.io.IOException: Invalid header signature; read 0x0010000000060809, expected 0xE11AB1A1E011CFD0

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-30 23:00:01

如果文件是xlsx格式而不是xls格式,您可能会收到此错误。我会尝试使用通用的Workbook对象(也称为SS Usermodel)

查看Workbook interfaceWorkbookFactory object。工厂应该能够为您创建一个基于xlsx或xls的通用工作簿。

我以为我有一个很好的教程,但我似乎找不到它。不过我会继续找的。

编辑

我在Apache的网站上找到了关于使用SS用户模型进行读取和重写的this little tiny snippet

我希望这能帮到你!

票数 2
EN

Stack Overflow用户

发布于 2012-05-29 14:32:30

标头签名无效;读取0x342E312D46445025,应为0xE11AB1A1E011CFD0

当我上传损坏的xls/xlsx文件时,我得到了这个错误(为了上传损坏的文件,我将sample.pdf重命名为sample.xls)。添加如下验证:

代码语言:javascript
复制
Workbook wbs = null;
try {
    InputStream input = new FileInputStream(s);
    wbs = new HSSFWorkbook(input);
} catch(IOException e) {
    // log "file is corrupted", show error message to user
}
票数 1
EN

Stack Overflow用户

发布于 2012-05-29 23:10:47

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

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

从这个异常中,我可以知道发生了什么,我还可以告诉您正在使用Apache POI的一个旧版本!0x0010000000060809的头签名对应于大约25年前的Excel4文件格式!如果您使用更新版本的Apache POI,它将显示一条有用的错误消息,告诉您所提供的文件是一个旧的、基本上不受支持的Excel文件。新版本的POI确实包括OldExcelExtractor tool,它可以从这些古老的格式中提取一些信息。

否则,与此类型的所有例外情况一样,尝试在Excel中打开该文件并执行另存为。这将使您了解当前的文件是什么(例如.html另存为.xls,.csv另存为.xls等),还允许您将其重新保存为适当的.xls文件,以便加载和使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10790136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档