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))不可以接收该流×(整改方案将POIFSFileSystem改为OPCPackage(无需new,其open()方法可以打开一个Inputstream))
详情区别可以参见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)大概就这么写写,特殊情况,特殊对待。
Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要的更多相关文章
- java使用POI实现excel文件的读取,兼容后缀名xls和xlsx
需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --&g ...
- PowerDesigner中表名过长,自动生成的主键名截取的问题
在PowerDesinger中,若表名过长,自动生成的主键名会被自动截取. 解决如下:DataBase/Edit Current DBMS/Scripts/Objects/PKey/ConstName ...
- 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...
- mysqli扩展有一系列的优势,相对于mysql扩展的提升主要优势有哪些?
mysqli扩展有一系列的优势,相对于mysql扩展的提升主要优势有哪些? 面向对象接口 prepared语句支持(译注:关于prepare请参阅mysql相关文档) 多语句执行支持 事务支持 增强的 ...
- 编写Java程序,跑道长 50m,模拟 3 名学生同时在跑道跑步的场景 3名同学相当于3个线程对象
查看本章节 查看作业目录 需求说明: 跑道长 50m,模拟 3 名学生同时在跑道跑步的场景 3名同学相当于3个线程对象 实现思路: 创建 Java 项目,在项目中创建StudentRunning类,该 ...
- php导出xls,报错:文件格式和扩展名不匹配。该文件可能已损坏或不安全。除非你相信它的来源,否则不要打开它。
打开文件报错如下 在文件头加上如下代码 ob_end_clean(); header('Content-Type:application/vnd.ms-excel'); header('Cache-C ...
- Java实现POI读取Excel文件,兼容后缀名xls和xlsx
1.引入所需的jar包: maven管理项目的话直接添加以下坐标即可: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -- ...
- ORA-01653:表空间扩展失败的问题(开启表空间自动扩展)
----查询表空间使用情况---使用DBA权限登陆SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间 ...
- 将对象的所有属性名放到一个数组中 || 获得对象的所有属性名 || return;不具有原子性 || 怎样自己制作异常|| 判断对象有没有某个属性 || 当传递的参数比需要的参数少的时候,没有的值会被赋予undefined || 获得函数实际传递的参数 || 怎么用函数处理一个对象 || 用一个名字空间定义一个模块所有的函数 || 给一个对象添加方法
获得对象的所有属性名 || 将对象o的所有属性名放到数组中 var o = {x:1,y:2,z:3}; var arr = []; var i = 0; for(arr[i++] in o){};/ ...
随机推荐
- Linux进程管理(-)
一.进程的类型 能够将执行在Linux系统中的进程分为三种不同的类型: 交互进程:由一个Shell启动的进程.交互进程既能够在前台执行,也能够在后台 执行. 批处理进程:不与特定的终端相关联,提交 ...
- apache kafka系列之-监控指标
apache kafka中国社区QQ群:162272557 1.监控目标 1.当系统可能或处于亚健康状态时及时提醒,预防故障发生 2.报警提示 a.短信方式 b.邮件 2.监控内容 2.1 机器监控 ...
- HDU 1754 I Hate It (段树单点更新)
Problem Description 很多学校更受欢迎的习惯. 老师们真的很喜欢问.从XX XX到其中,的是多少. 这让非常多学生非常反感. 无论你喜不喜欢,如今须要你做的是,就是依照老师的要求.写 ...
- SQL入门学习3-数据更新
4-1 数据的插入(INSERT语句的使用方法) 使用INSERT语句可以向表中插入数据(行).原则上,INSERT语句背刺执行一行数据插入. CREATE TABLE 和INSERT 语句,都可以设 ...
- .NET反编译之Reflector基础示例
这几日由于公司需要, 看了些.NET反编译技巧,特地和大家分享下 .NET反编译工具很多,Reflector是其中一个很优秀的工具,所以就用它来进行反编译工作了.今天我们就用"繁星代码生成器 ...
- iOS 生成随机颜色(UIColor)
#import <UIKit/UIKit.h> @interface UIColor (RandomColor) +(UIColor *) randomColor; @end #impor ...
- 3D数学学习笔记——笛卡尔坐标系
本系列文章由birdlove1987编写.转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24601215 1.3D数学 ...
- 独立博客网站FansUnion.cn操作2多年的经验和教训以及未来计划
今天,我把运营了2年的独立博客站点FansUnion给"归零"了. 2012年6月.我成功搭建了自己的博客站点FansUnion.cn,这是因为自己的不懈努力和时代发展成就的 ...
- BZOJ 1010: [HNOI2008]玩具包装toy
职务地址:http :// www . lydsy . com / JudgeOnline / problem . php ? id = 1010 题目大意:见原题. 算法分析: 设s[i]为c[i] ...
- codeforces 438D
在大大推荐下这个标题不明的人做.而我的最后一个非常喜欢的段树,因此,愤怒出手.认为基本上相同.大值,当最大值小于取模时能够剪枝. 今后再遇到此类问题算是能攻克了 // file name: d.cpp ...