Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案。
- 优点:
效率高
支持公式,宏,一些企业应用上会非常实用
能够修饰单元格属性
支持字体、数字、日期操作
- 缺点:
不成熟,代码不能跨平台,貌似不少同行在使用工程中还碰到让人郁闷的BUG(最近的项目中也是遇到了一些bug,不过目前没有查出来是代码的问题还是POI的问题,总之问题很诡异,数据替代参数总有失败的。关于不能跨平台这一说,我也没有试验过,不过Java不是跨平台吗?POI是JAVA的一个组件,怎么就不能跨平台了呢,总之这些问题还需要在以后的项目中多多实践,才能比较出区别之处。)
POI实现模板打印
我们系统根据用户习惯,采用excel方式,作为业务输出打印。打印时POI是有问题,打印时代码量非常大,样式代码非常多,(常保存,样式和字体对象创建过多)。打印时非常难控制。我进行改造,我使用模板来开发,在模板中定义列宽(POI操作列宽时有BUG,计算非常繁琐),还可以定义静态文件,例如标题部分等静态文字的内容,打印纸质方向,打印页面标题,页眉页脚,都可以在模板中设置。首先无需记忆复杂特殊api。设置字体、样式也可以直接在模板中定义。打印时先读取模板,只处理业务数据的打印即可。
POI海量数据导出系统中备份数据和恢复数据。
操作excle主要有jxl和poi两种方式,jxl在处理数据时比早期的poi快。(poi早期对象,处理时都是将加工的数据存放在内存中,如果数据量很多,很容易造成堆溢出,同时它占用CPU和大量内存,导致其他业务也无法正常完成。)poi在新版本中改善这个性能瓶颈。对大数据量的导出做了优化。
使用ooxml技术,使用SXSSF对象,当数据创建到指定数量时,自动写缓存,将它内容输出到临时文件中。这个临时文件是一个xml,相比内存中对象的结构非常简单。只保留数据的信息。保存的数据量也非常少。这样就可以形成大数量的导出。例如:杰信项目中,购销合同业务,它有很多历史信息,积累了很多年,数据量达到近百万。导致系统变慢,我们采用poi导出数据备份到excel文件中。将这部分历史信息从当前表删除。在打印中就可以直接实现。(excel单sheet可以支持1048576)。