1.背景
项目中需要将相关数据导出为EXCEL文件,该文件格式已定义在一EXCEL模板文件中。
方案1:jasperreport
实现后发现jasperreport对报表大小的像素设定不是很准确,导致生成的EXCEL文件和模板差异较大,几经调整效果均不理想,否定。
方案2:POI
直接使用POI拼接生成EXCEL文件,代码复杂,不易维护,否定。
方案3:自定义POI EXCEL模板
对EXCEL模板文件进行数据填充,POI不支持,需要自己设计,几经思考,利用现有的一些开源框架实现了该功能,效果也能达到要求,采用。
下面将介绍自定义POI EXCEL模板的实现
2.原理
借鉴了jasperreport的实现原理,如下图所示
3.组件图
POI XLS:当前项目,自定义POI EXCEL模板
POI:Apache开源项目,用于操作EXCEL文件,被用于读取模板文件和生成目标文件
JSON-LIB:用于解析模板文件中的配置信息
OGNL:从数据源中获取对应单元格的填充数据
4.类图
5.应用实例
XLSReportCreatorTest.java 可在源码中获取
package com.siyuan.report.xls.test;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.siyuan.report.xls.XLSReportCreator;
import com.siyuan.report.xls.data.XLSReportBeanDataSource;
import com.siyuan.report.xls.template.XLSReportClassPathTemplate;
import com.siyuan.report.xls.template.fill.XLSReportCommentFiller;
public class XLSReportCreatorTest {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
OutputStream os = new FileOutputStream("D:/test/poitest/autoVerifyLoss.xls");
Map fillData = new HashMap();
fillData.put("brandName", "一汽XXX");
fillData.put("licenseNo", "粤A12345");
fillData.put("frameNo", "车架号XXXXX");
fillData.put("engineNo", "发动机型号XXXX");
List autoLossItemList = new ArrayList();
Map autoLossItem = new HashMap();
autoLossItem.put("itemCode", "零件编码0001");
autoLossItem.put("itemName", "零件名称0001");
autoLossItem.put("itemSystemReferenceAmt", 1234);
autoLossItemList.add(autoLossItem);
Map autoLossItem1 = new HashMap();
autoLossItem1.put("itemCode", "零件编码0002");
autoLossItem1.put("itemName", "零件名称0002");
autoLossItem1.put("itemSystemReferenceAmt", 2345);
autoLossItemList.add(autoLossItem1);
fillData.put("autoLossItemList", autoLossItemList);
XLSReportCreator.createXLS(new XLSReportClassPathTemplate("autoVerifyLoss.xls"),
new XLSReportBeanDataSource(fillData),
new XLSReportCommentFiller(),
os);
os.close();
}
}
6.相关资料
POI EXCEL模板实现源码 poixls.rar