POI3.6 生成Excel2007 效率低的解决办法
来源:互联网 发布:淘宝买口红靠谱吗 编辑:程序博客网 时间:2024/04/29 18:00
最近项目中要将较大数据生成Excel2003或Excel2007文件。
由于POI很好的采用了面向接口编程的思想,所以其实生成Excel2003和生成Excel2007的代码多数是可以复用的。
我的做法是:
1.定义Excel2003FileCreator,用来生成Excel2003文件
2.定义Excel2007FileCreator,用来生成Excel2007文件,Excel2007FileCreator extends Excel2003FileCreator。
在Excel2003FileCreator中定义
protected org.apache.poi.ss.usermodel.Workbook workbook;
protected org.apache.poi.ss.usermodel.Sheet sheet;
private org.apache.poi.ss.usermodel.Row row
Workbook,Sheet ,Row均为接口。
只要在生成workbook时,确定是
org.apache.poi.hssf.usermodel.HSSFWorkbook // 生成Excel2003文件用
还是
org.apache.poi.xssf.usermodel.XSSFWorkbook // 生成Excel2007文件用
即可。
后续的Sheet,Row 都是根据 workbook 创建的。
问题的出现:
在对每一个Cell进行设置Style和Value的时候,我先根据DB中的配置,取得每个单元格的格式,再对其进行设定值。
再进行设置其他单元格格式。
只列实现代码:
取得的Style,再调用Cell对象的 cell.setCellStyle(Style) 进行设置格式。
因为这段代码是生成Excel2003和Excel2007时候都要用到的。
生成1w的数据,Excel2003是没有问题的,速度很快。
但是同样的数据,生成Excel2007时,速度慢的可以,让人不能接受。
最后调查得出的结果是:瓶颈在于org.apache.poi.xssf.usermodel.XSSFWorkbook 在生成字体和样式对象时。
问题的解决:
由于对于文件体的单元格设置,每一列几乎是相同的。所以将生成字体和单元格样式的代码做了一些小调整:
取得样式
这样改了之后,速度立刻提高了。
当然,在用完之后,记得clear。
这里要注意的是,缓存HashMap对象中的Key的设定。
Key在组合时要体现出你的单元格格式,又不会因为组合,使得缓存中对象混乱了。
- POI3.6 生成Excel2007 效率低的解决办法
- poi3.16读取xlsx excel2007+的官方例子
- 使用POI3读取Excel2007格式
- PO2与POI3差异研究(基于POI3.8)用于解决JAVA环境下EXCEL2003.EXCEL2007.EXCEL2010的兼容性问题
- 无法删除excel2007的解决办法
- 使用POI3.5时,为能兼容Excel2007而发生的异常
- 用poi3和chartdirect生成带图表的excel报表
- 效率很低的一周
- 效率低的日子怎么办?
- 锁的效率很低
- Delphi下面的ADO数据集的Next效率低及解决办法
- MySQL的in查询效率太低的解决办法之一与其它优化示例
- 关于项目中导出,导入由jxl转化为poi3.14(高版本低版本通用)的文档说明
- 今天效率很低的说
- 为什么说虚函数的效率低
- setpixel,getpixel效率太低的问题
- 效率极低人群的七大习惯
- 一天的学习效率好低
- VTK简介及安装
- C#操作DllImport应用
- 宏定义/#argument/##
- 哈佛老师经常给学生这样的告诫
- 透析回调函数
- POI3.6 生成Excel2007 效率低的解决办法
- 数据类型
- 提高开发效率的53个PHP编程技巧.
- java 路径 批处理空格 getRuntime().exec 空格解决办法
- 可变参数举例
- VC数据类型
- mysql全文搜索:sql的写法
- NetBeans6.8 中文乱码
- java 初级类型转换问题