Apache POI个人总结
开发者在使用java开发Microsoft Office相关办公文件时,Apache POI常常会被使用到,对比其它工具,它提供的接口更加丰富,功能也更加全面,其官网资料和样例也非常丰富(样例在官网的Components APIs栏目下)。个人认为无需在它和EasyExcel等之间纠结使用哪个,看自己的需求和喜好吧!使用POI时,一定要注意以下两个问题:
1. Out of Memory exception,官网上已经有多次针对这个bug的修复,例如新增SXSSFWorkbook处理大数据量,但POI依旧会占用非常多的运存,开发完成后一定要多造点数据和场景去测试。
2. 因为POI使用了log4j,复杂点的项目都会很容易发生依赖冲突,发生冲突时,常见以下错误
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.logging.log4j.Logger.atTrace()Lorg/apache/logging/log4j/LogBuilder;
at org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl.<init>(SchemaTypeSystemImpl.java:196)
at org.apache.poi.schemas.ooxml.system.ooxml.TypeSystemHolder.<init>(TypeSystemHolder.java:9)
at org.apache.poi.schemas.ooxml.system.ooxml.TypeSystemHolder.<clinit>(TypeSystemHolder.java:6)
at org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook.<clinit>(CTWorkbook.java:22)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onWorkbookCreate(XSSFWorkbook.java:475)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:232)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:226)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:214)
at poi.SimpleHoldReport.main(SimpleHoldReport.java:22)
Process finished with exit code 1
实例
该实例可在Github和Gitee上找到,大家可以用作参考。假设有以下模拟数据,我们需要用这些数据生成一个2007(+)版本的持仓报表excel文件
p