Excel表头错误导致JXL读取异常,求解决方案

Johnny1850 2009-01-18 01:08:22
第一次发帖,不懂规矩,我尽量描述的清晰一点吧,请高人指点。
事情是这样的,我用Javascript的ActiveXObject方式生成了很多个Excel,我想用JXL读取这些Excel然后结合到同一个Excel中。
但是因为javascript技术经验不足,生成的Excel表头都是损坏的,虽然用Office Excel软件可以打开,但是提示“文件可能随坏,是否继续”的警告,忽略后可以打开Excel文件,并不影响使用。
我没有2进制察看工具,用Eclipse执行Debug出损坏的Excel文件头为[80, 75, 3, 4, 20, 0, 6, 0, 8, 0, 0, 0.......
一个完整的Excel文件表头应该是D0 CF 11 E0 A1 B1 1A E1 00......
所以因为文件表头不匹配,在JXL执行文件解析的时候,就这么爆掉了:
jxl.read.biff.BiffException: Unable to recognize OLE stream
at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116)
at jxl.read.biff.File.<init>(File.java:127)
at jxl.Workbook.getWorkbook(Workbook.java:221)
at jxl.Workbook.getWorkbook(Workbook.java:198)
at application.CapiExcelMerge.main(CapiExcelMerge.java:15)
我试过每个文件用Office Excel打开,忽略错误并且另存,就可以搞定这个问题。但是每个文件打开工作量比较大,真的希望各位大虾能帮忙提供一个好的解决办法。
...全文
482 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Johnny1850 2009-01-20
  • 打赏
  • 举报
回复
问题已经解决,其实本质上不是javascript的ActiveXObject的问题。实质上,在用
new ActiveXObject("Excel.Application");
做成一个Excel事例的时候,"Excel.Application"会受到本地所安装的Office版本影响。
我在测试时候装的是Office2007,所以最后
WorkBook.save("test.xls");
的时候,存成的Excel文件为07版的新扩展类型.xlsx 所以以xls方式打开,因为xls和xlsx表头不同,会报异常。

这说明了两个问题
1:jxl目前只支持03版本以前的xls格式文件。
2:javascript做成Excel文件的时候完全取决于本地Excel版本的。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧