有一个项目要在J2EE后台读取EXCEL中的内容,调研后决定采用Apache POI来处理这一问题。
一开始先自己用Excel 2003写了一个测试文件,导入POI接口时是能够正常读取Excel文件的。
但后来,使用客户提供的Excel文件时,出现了如下的错误:
Invalid header signature; read 4503599627764745, expected -2226271756974174256
经过分析得知,客户的Excel文件是从第三方软件导出的,大约是Excel 4.0或者根本不合标准的文件头。简单的解决办法就是用Excel2003打开客户提供的文件,然后另存为Excel 2003格式,文件头就可以得到修复,用POI打开就没有问题了。
但是,客户是对电脑非常不熟悉的人,让他们作此操作真是非常麻烦,而且还要安装了Office 2003才行。后来找到一个解决办法:
发现了一款叫Advanced Excel Repair的软件,能够对各个版本的、损坏的Excel都做出有效的修复,最后修复为Excel 2003格式。修复后的Excel文件就可以让POI正常读取、解析了。
另外的问题是,AER软件是共享软件,需要下载破解版的,下载地址是:http://www.hanzify.org/index.php?Go=Show::List&ID=8805。还有就是,该软件虽然有命令行模式的运行办法,但修复结束后会弹出一个对话框让用户确认。在后台自动运行的方式下,会生成该程序的多个实例,消耗系统资源。解决办法就是,让Java等待一段时间后,特别杀掉这个进程,让其释放资源。
发现了该解决方案的一个重要依赖,就是要安装Excel 2003以上版本,估计这个AER软件要调用相关的Excel Dll来修复文件。这一论断已经经过验证。
另外,上述汉化破解版本的AER可能含有后门或者病毒,值得注意!
Java代码如下: