jxls实现excel动态模板

       最近项目有需求要做几个报表,页面涉及行列的合并和分组,费了九牛二虎之力把jsp页面展示给做完了,但是更困难的其实是导出功能,简单的excel导出大致就是第一行标题,后续数据,使用poi包的HSSFWorkbook等工具类就可以实现,这里不做赘述。但LZ这次的需求涉及行和列的合并,带参数的标题头等苦难,用代码控制略显繁琐,且不容易操作。LZ无奈借助百度君,找到jxls模板语言导出模板excel的解决方案,几番尝试后证实,功能可用且相当强大。

       首先第一步,引入jar包,最主要的两个,jxls-core-x.x.x.jar和poi-x.x.jar。接下来封装自己的数据,结构可以全部是Map,List组合,也可以自己封装对象,最后存储在一个map中,作为参数使用。代码样例:

private void buildXLS(Map map, String filePath, String targetPath) 
{
	XLSTransformer transformer = new XLSTransformer();
	try 
	{
		InputStream is = new FileInputStream(filePath);
		XSSFWorkbook workBook = (XSSFWorkbook) transformer.transformXLS(is,map);
		workBook.setActiveSheet(0);
		OutputStream os = new FileOutputStream(targetPath);
		workBook.write(os);
		is.close();
		os.flush();
	} 
	catch (FileNotFoundException e) 
	{
		log.error(e);
	}
	catch (IOException e) 
	{
		log.error(e);
	} 
	catch (Exception e) 
	{
		log.error(e);
	}
}
public String execute()
{
	...
	//生成excel文件
	buildXLS(map, filePath, targetPath); 
	inputStream = new FileInputStream(targetPath);
   
        fileName = "SheetMonthReport.xlsx";
        return "file";
}

 struts配置:

<result name="file" type="stream">
	<param name="inputName">inputStream</param>
	<param name="contentType">application/octet-stream</param>
	<param name="contentDisposition">attachment;filename="${fileName}"</param>
	<param name="bufferSize">4096</param>
</result>

 当然了,前面说的都是铺叙,现在说下重点,excel模板导出具体怎么做呢,先把自己的模板搞好,根据客户的需求或者自己琢磨一个华丽的模板,然后就需要嵌入jx标签了。

 

list类型的遍历

xxyy
<jx:forEach items="${datas}" var="data"> 
${data.SHEETNO}${data.SHEET_NUM}
</jx:forEach> 
合计$[SUM(B4)]

 

Map类型的遍历

xxyy
<jx:forEach items="${brokenMonthMap.keySet()}" var="key" varStatus="status"> 
${key}${brokenMonthMap.get(key).get('aaa').get('bbb')}
</jx:forEach> 

 

组合遍历

名称<jx:forEach items="${nums}" var="num" varStatus="count">值${count.index+1}</jx:forEach>
<jx:forEach items="${datas}" var="data" varStatus="status">   
参数${status.index+1}<jx:forEach items="${data.keySet()}" var="key" varStatus="count">${data.get(key)}</jx:forEach>
</jx:forEach>   

if判断

<jx:if test="${entity.params==1}">
zz
</jx:if>


       注意:所有的标签都是单独存在的,必须单独放在某一个单元格中,且前后不能有多余字符,特别注意左右不能有空格。LZ在这里只是简单介绍下jxls的语法,开发一些简单的excel模板报表基本够用了,如果有更复杂的数据类型或者展示方式,详情可自行查找相关文档自己学习。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值