自定义POI EXCEL模板

本文介绍了一种基于POI的Excel模板填充方法,通过自定义实现数据与模板的精准匹配,有效解决了报表生成中的常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值