Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要

Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要

作者:Eric.Zhang(花名:穿越者7号)

日期:2015年11月11日

一.前言

POI技术是Apache基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。详细解释见百度百科http://baike.baidu.com/link?url=CaOC3cXmdxU-2fjV-VfSZjoKvrKEpONcQiWypy0HwbpBTHZNLLrVKFL6BnOR-mQ1_xPbunllGvO5CcG01HZCLDm-eEw7Um8gw2VGjXRAwx3

二.   HSSFWorkbook升级到XSSFWorkbook过程

1. HSSFWorkbook是版本比较陈旧的导出Excel方式,提供读写Microsoft Excel格式档案的功能。

2. XSSFWorkbook时版本比较新的导出Excel方式,提供读写Microsoft Excel OOXML格式档案的功能。

3. HSSFWorkbook基类与XSSFWorkbook基类jar包区别及使用方法:

参考文献:http://blog.csdn.net/szwangdf/article/details/39053859

①   当我们只要使用xls格式时、只要导入poi-version-yyyymmdd.jar就可以了。

②   当我们还要使用xlsx格式、还要导入poi-ooxml-version-yyyymmdd.jar。

③   至于poi-ooxml-schemas-version-yyyymmdd.jar这个jar基本不太会用到的。

④   当我们需要操作word、ppt、viso、outlook等时需要用poi-scratchpad-version-yyyymmdd.jar。

友情提示jar包下载地址:http://poi.apache.org/download.html

4.关于两者性能差异(参考文献: http://poi.apache.org/spreadsheet/index.html)
  如果你仅仅是阅读的电子表格数据,然后使用eventmodel api org.apache.poi.hssf。eventusermodel包,或org.apache.poi.xssf。eventusermodel方案,根据您的文件格式。
  如果你修改电子表格数据然后使用usermodel
api。你也可以生成电子表格。
  注意usermodel系统内存占用高于eventusermodel的低水平,但的主要优点是简单得多。也请注意,新XSSF Excel 2007支持OOXML(.xlsx)文件是基于XML的,处理他们的内存占用高于老HSSF支持(xls)二进制文件。下面是一张来自官方的性能比较图表:

5. 升级过程注意事项:

(1)关于基类及子类方法名称(HSSF替换为XSSF)

(2)关于单元格合并,不少以HSSFWorkbook为基类的包含导出功能的项目,有些使用了

Region类(在POI3.8中已经被废弃),其中Region类为新版本已废弃的类其参数列表与新版的CellRangeAddress类有区别,具体区别如下:


区别


Region


CellRangeAddress


参数列表

(int firstRow,
int firstCol,

int lastRow,

int lastCol

)

(int firstRow,

int lastRow,

int firstCol,

int lastCol

)


参数列表详情


参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号


参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列

(3)关于基类构造参数(参考文献http://poi.apache.org/apidocs/)

HSSFWorkbook和XSSFWorkbook这两者都可以接收文件输入流但是略有不同:

①   HSSFWorkbook(new POIFSFileSystem(fileURL))可以接收该流√

②   XSSFWorkbook(new POIFSFileSystem(fileURL))不可以接收该流×

③   但是两者都可以接收new FileInputStream(fileURl)文件输入流√

详情区别可以参见Apache官网http://poi.apache.org/apidocs/

6. 对于升级过程简单粗暴的总结

(1)引入jar包

(2)buildPath

(3)copy一份基于HSSFWorkbook的类

(4)Ctrl+F查找替换(查找HSSF替换为XSSF)

(5)按需修改一些特殊的方法及参数列表(例如CellRangeAddress)

(6)因不同项目所使用的方法不同,可能升级过程会产生这样或那样的错误,只针对个别方法按照高版本的参数列表及功能需求做调整即可。

友情提示:一般常见错误:导出后Excel报错(提示已删除部分合并的单元格之类的提示),需要逐一对照生成Excel过程代码,对于重复合并的逻辑改写,XSSFWorkbook对于重复合并时不被允许的。

(7)大概就这么写写,特殊情况,特殊对待。

时间: 2024-10-02 17:20:53

Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要的相关文章

java使用POI实现excel文件的读取,兼容后缀名xls和xlsx

需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </depen

PowerDesigner中表名过长,自动生成的主键名截取的问题

在PowerDesinger中,若表名过长,自动生成的主键名会被自动截取. 解决如下:DataBase/Edit Current DBMS/Scripts/Objects/PKey/ConstName中找到Value的值,默认是 PK_%.U27:TABLE%,U27表示截取27个字符.改成PK_%TABLE%主键名就不会被截取了. 同理,对生成的约束名常常因为截断字符串而导致重名错误,可以放开. DataBase/Edit Current DBMS/Scripts/Objects/Refere

CI中控制器名不能和本个 控制器中的方法名相同

控制器名称:application/controllers/tang.php 控制器中方法名称:application/controllers/role.php  中有方法 public  function tang(){ } 这样就会出现错误 CI中控制器名不能和本个 控制器中的方法名相同,布布扣,bubuko.com

扩展方法的几个实例,扩展基本类型、接口、通过反射让扩展方法使用私有成员等

.net扩展方法可以扩展很多类型,包括:基本数据类型.接口.类,等等.如果,需要扩展的类型包含私有成员,扩展方法如何运用这些私有成员呢?本篇逐一体验,包括: ■ 扩展基本数据类型■ 扩展接口■ 扩展包含私有字段的类 使用反射获取类的私有字段■ 扩展一个类的私有嵌套类 通过反射 扩展方法有几个必要前提:● 扩展方法所在的类必须是静态类● 扩展方法本身必须是静态方法● 扩展方法参数中,对类型的扩展参数前必须加this关键字 扩展基本数据类型 针对DateTime类型写一个扩展方法. public s

查询视图对应的基表名以及视图字段和对应的基表字段名

ALTER View [dbo].[ViewSchema] as select v.name ViewName,t.name TableName,vc.name ViewCol,tc.name TableCol from sysdepends d, sysobjects v, syscolumns vc, sysobjects t, syscolumns tc where objectproperty(d.id,'IsView')=1 and d.id=v.id and v.id=vc.id a

Python3基础 os.path.splitext 对一个带有扩展名的文件名字符串 进行分割 返回 文件名+扩展名

镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.------------------------------------------ code: import os fileNameAndExtensionName='道德经.txt' (fileName,ExtensionName)=os.path.splitext(fileNameAndExtensionName) print(fileName) print(Exte

ORA-01653:表空间扩展失败的问题(开启表空间自动扩展)

----查询表空间使用情况---使用DBA权限登陆SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') &q

北京3名便衣警察遭人持刀砍伤 6名嫌疑人全部落网z

新华社华盛顿1月3日电(记者陆佳飞 周而捷)美国白宫3日说,目前没有迹象显示朝鲜的核能力发生了变化.据上海市侨办消息,近日,上海市侨办政研处处长余晓芳率上海侨务代表团一行4人访问日本,受到当地侨团的欢迎.白宫的工作人员已经在准备着总统就职典礼那天的忙乱--他们只有6个小时,送走奥巴马一家,迎接新的总统.从大胃王比赛主办方公开的视频可见,她从容不迫地让汉堡从盘上消失,全程面不改色. 胡鸿毅认为,在走出去的过程中,必须牢牢把握住中医药的内在特质,这就涉及人才培养.科学研究.文化传承等很多方面."我们

开源ext2read代码走读之-扩展分区与逻辑分区说明及如何读取扩展分区的分区表(EBR)

一个硬盘可以有很多分区,但MBR分区表只有四项,怎么能突破这个限制呢?答案是扩展引导记录(EBR - Extended Boot Record),通过把MBR分区表中一项设为扩展分区(系统ID为0x05或0x0F),其分区表项指定扩展分区的起始位置和长度,在其中最开始扇区 (EBR)和MBR相同位置(0x1BE)放置另外一个分区表,一般称为扩展分区表.扩展分区表的第一项指定扩展分区目前的逻辑分区信息,如果还有更多的 逻辑分区,扩展分区表的第二项指定下一个EBR的位置,否则为0.最后的两个分区表项