最近项目中要将较大数据生成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跟poi3.7解析excel2007用到的包
利用poi3.6 解析excel2003文件的程序代码.
poi3.6 兼容office 2003,2007
poi3.6官方帮助文档 poi3.6官方帮助文档 poi3.6官方帮助文档
excel poi3.6 excel poi3.6 excel poi3.6
poi-3.6-20091214.jar
poi 3.6 zuixinde API chm格式
网上找了很久 poi3.6 excel2007操作 使用event api的例子
POI-3.6 poi解析Excel(2003\2010)的jar集合,支持office2003\2010
poi jxl 生成EXCEL 报表 POI 用的JAR poi-3.6-20091214.jar jxl 用到的jar jxl-2.6.jar
1.java使用poi生成excel插入图表曲线 2.demo包含完成jar包 3.主要用途是过滤数据自动生成曲线图
POI生成Excel POI读取Excel java操作Excel Servlet生成Excel web项目,包含含读取Excel与生成Excel方法
poi-3.6-20091214.jar poi-contrib-3.6-20091214.jar poi-examples-3.6-20091214.jar poi-ooxml-3.6-20091214.jar poi-ooxml-schemas-3.6-20091214.jar poi-scratchpad-3.6-20091214.jar xmlbeans-2.3.0.jar
poi excel poi excel poi excel poi excel poi excel poi excel poi excel poi excel
poi 支持Excel 2007 poi支持Excel 2007 poi支持Excel 2007
NULL 博文链接:https://topbox163.iteye.com/blog/1114166
poi api 3.6.chm,poi最新版本chm格式api文档
用于java导出生成excel,excel导出jsp的图片
根据开发者,相比先前版本,POI3.6在处理电子表格数据时可以节省200%内存消耗。主要的更改如下:一个ooxml-schemas-1.0.jar轻型版本,在二进制发行包中这个jar文件替换了之前大的ooxml-schemas-1.0.jar,以及...
poi-3.6 poi-ooxml-3.6 poi-ooxml-schemas-3.6 poi-scratchpad-3.6