`
orange5458
  • 浏览: 347343 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

自定义POI EXCEL模板

阅读更多

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

  • 大小: 7.7 KB
  • 大小: 2.9 KB
  • 大小: 15.5 KB
分享到:
评论
1 楼 qgm168 2014-08-13  
写的不错,借用啦,哈哈,多谢!

相关推荐

Global site tag (gtag.js) - Google Analytics