POI2与POI3差异及解决excel2003和excel2007兼容性研究报告
f1现有问题:
近期发现报表系统(使用EXCEL作报表),在不知情的用户使用了EXCEL2007版本之后,出现了一系列兼容性问题1、用POI2x操作EXCEL2007文件,会导致后台错误。
orgapachepoi7poifsfilesystemOfficeXmlFileExceptio
Thesupplieddataappearstobei
theOffice2007XMLYouarecalli
gthepartofPOIthatdealswithOLE2OfficeDocume
tsYou
eedtocalladiffere
tpartofPOItoprocessthisdataegXSSFi
steadofHSSF
2、涉及EXCEL导出的部分,若文件内容是EXCEL2007,却使用XLS为后缀名的文件。那么使用EXCEL2003打开会导致乱码现象。3、目前新建报表模版,无论客户端安装的是什么版本的OFFICE,后台都是用EXCEL2003(POI2)文件格式创建的。4、目前兼容性问题影响范围包含但不限于:模板制作、报表导出、模板版本化、批量折合等所有用到EXCEL后台操作的功能。
2问题原因:
报表平台现有系统在后台处理Excel都是使用apache的POI2x进行解析处理,但是poi2x是和jdk14兼容的,且poi2x只能处理excel2003及以前的老版本excel文件,客户机器上安装的往往是较新版的office2007,要处理excel2007就必须使用poi35以上的版本,poi35及以上的版本适用jdk15版及以上,并支持excel2007的处理。
3POI2x与POI3x的区别:
31什么是POI
ApachePOI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对MicrosoftOffice格式档案读和写的功能。现在较新较稳定的POI版本是37,即常说的POI7,最新的POI38已经出了beta2版本支持EXCEL2010的操作。
第
1
页
f32如何使用POI
完整的POI38beta2包含如下类库:poi38beta220110408jarpoiexamples38beta220110408jarpoiexcela
t38beta220110408jarpoiooxml38beta220110408jar(OfficeOpe
XML)poiooxmlschemas38beta220110408jarpoiscratchpad38beta220110408jar另需要一些配套包的支持dom4j161jarstaxapi101jarxmlbea
s230jar(必须使用23或以上的版本)commo
sloggi
g11jarju
it381jarlog4j1213jarPOI38的具体API及实现方法不在本文详述。
33POI结构及版本区别:
1、首先,相对于POI2X及以下版本,POI3X支持较高版本的Office操作,在本文中关注的是能够对EXCEL2007进行操作,并可兼容操作EXCEL2003。部分类图如下:
第2页
f(图1)
如上图,POI2x的结构只有类图中左半部分,POI3x新增了以XSSF前缀的EXCEL文件操作对象,用于对OOM格式的EXCEL操作。POI3完整具体结构和作用如下:结构:HSSF-提供读写MicrosoftXSSF-提供读写MicrosoftHWPF-提供读写MicrosoftHSLF-提供读写MicrosoftHDGFr