- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
POI2与POI3差异及解决excel2003和excel2007兼容性研究报告_V1.1解析
POI2与POI3差异及解决excel2003和excel2007兼容性研究报告
现有问题:
近期发现报表系统(使用EXCEL作报表),在不知情的用户使用了EXCEL2007版本之后,出现了一系列兼容性问题:
用POI2.x操作EXCEL2007文件,会导致后台错误。
org.apache.poi7.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
涉及EXCEL导出的部分,若文件内容是EXCEL2007,却使用.XLS,为后缀名的文件。那么使用EXCEL2003打开会导致乱码现象。
目前新建报表模版,无论客户端安装的是什么版本的OFFICE,后台都是用EXCEL2003(POI2)文件格式创建的。
目前兼容性问题影响范围包含但不限于:模板制作、报表导出、模板版本化、批量折合等所有用到EXCEL后台操作的功能。
问题原因:
报表平台现有系统在处理Excelapache的POI,但是poi2.x是和jdk1.4兼容的,poi2.x只能处理excel2003以前的老版本excel文件,客户机器上安装的往往是新版的office2007,要处理excel2007就必须使用poi3.5以上的版本,poi3.5以上的版本jdk1.5版及以上excel2007的处理。
POI2.x与POI3.x的区别:
什么是POI
Apache POI是Apache基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能。如下:poi-3.8-beta2jar
poi-examples-3.8-beta2jar
poi-excelant-3.8-beta2jar
poi-ooxml-3.8-beta2jar (Office Open XML)
poi-ooxml-schemas-3.8-beta2jar
poi-scratchpad-3.8-beta2jar
另需要一些配套包的支持
dom4j-1.6.1.jar
stax-api-1.0.1.jar
xmlbeans-2.3.0.jar (必须使用2.3或以上的版本)
commons-logging-1.1.jar
junit-3.8.1.jar
log4j-1.2.13.jar
POI3.8的具体API及实现方法不在本文详述。
POI结构及版本区别:
首先,相对于POI2.X及以下版本,POI3.X支持较高版本的Office操作,在本文中关注的是能够对EXCEL2007进行操作,并可兼容操作EXCEL2003。
部分类图如下:
(图1)
如上图,POI2.x的结构只有类图中左半部分,POI3.x新增了以XSSF前缀的EXCEL文件操作对象,用于对OOM格式的EXCEL操作。
POI3完整具体结构和作用如下:
结构:
HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF - 提供读写Microsoft Word格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写Microsoft Visio格式档案的功能。 excel2007文件格式与之前版本不同,之前版本采用的是微软自己的存储格式。07版内容的存储采用XML格式
public static Workbook createCommonWorkbook(InputStream inp)
throws IOException, InvalidFormatException {
// 首先判断流是否支持mark和reset方法,最后两个if分支中的方法才能支持
if (!inp.markSupported()) {
// 还原流 inp = new PushbackInputStream(inp, 8);
}
// EXCEL2003使用的是微软的文件系统
文档评论(0)