XLSransformer + 模板 导出 EXCAL

官网链接 : http://jxls.sourceforge.net

准备一个EXCAL模板

新建一个EXCAL模板文件,在模板文件中写好相应的列头,也可以使用组织的参数循环生成,模板中可以设置字文本框,字体等样式(使用和正常操作EXCAL相同)
在这里插入图片描述

模板标签

jx:if标签

jx:if标签的典型用法如下

jx:if标记可用于根据某些条件从导出中排除某些列。如果将打开和关闭jx:if标签放在同一行中,则jXLS将根据测试条件处理或除去标签主体中包含的列。

<jx:if test="${department.chief.payment > 2000.0}">
	Chief Name: ${department.chief.name}
</jx:if>
jx:outline标签

jx:outline标记可让您对特定的行集进行分组。例如有

 <jx:outline>
	//any rows can go here
 </jx:outline>

jx:group标记正文中的所有excel行将被分组。
jx:outline标记具有一个可选的布尔值属性,用于detail指示分组行的初始状态-将其展开显示还是折叠。默认值是false 指分组的行将被折叠(或隐藏)。

jx:out标签

jx:out标签看起来像这样

 <jx:out expr="expression" />

该标记可以在表达式可以正常使用的任何地方使用,只需将JEXL表达式作为属性值即可。

jx:forEach标签

使用jx:forEach标签对数据进行分组

jx:forEach标记允许您通过基础bean属性之一对收集数据进行分组。这可以通过groupBy和groupOrder属性来完成,这些属性指定应使用哪个属性对数据进行分组以及应如何对组进行排序。例如

//可以forEach标签也可以嵌套使用
 <jx:forEach items="${employees}" groupBy="age">
	 Age: ${group.item.age}
	 <jx:forEach items="${group.items}" var="employee">
	 	${employee.name} | ${employee.payment} | ${employee.bonus}
	 </jx:forEach>
 </jx:forEach>
筛选收集项目

您可以使用jx:forEach标记的’select’属性来控制哪些项目包含在循环中。例如,如果我们只想包含付款超过2000的员工,则可以使用下一个语法

 <jx:forEach items="${employees}" var="employee" select="${employee.payment > 2000}">
 	${employee.name} | ${employee.payment} | ${employee.bonus}
 </jx:forEach>
varStatus属性

jx:forEach标记支持varStatus属性,该属性定义循环状态对象的名称,该名称将为每次迭代传递到bean上下文中。循环状态对象是LoopStatus类的实例,该类具有单个“ index”属性,用于标识要迭代的集合中当前项目的索引。

<jx:forEach items="${employees}" var="employee" varStatus="status">
	| ${status.index} | ${employee.name} | ${employee.payment} | ${employee.bonus}
</jx:forEach>

通过模板导出EXCAL

	HttpServletRequest request;
	HttpServletResponse response;
	XLSTransformer transformer = new XLSTransformer();
	
	//使用1 导出模板保存在指定位置
	transformer.transformXLS("模板地址",数据Object,"保存地址");
	return;
	
	//使用2(推荐) 通过模板生Workbook 通过流下载
	Workbook workbook = transformer.transformXLS(new FileInputStream("模板地址"),数据Object);
	String realName = "下载的EXCAL名称";
	String userAgent = request.getHeader("User-Agent")
	if(StringUtils.isNotEmpty(userAgent)){
		userAgent = userAgent.toLowerCase();
		if(userAgent.indexOf("msie") != -1){
			realName = URLEncoder.encode(realName,"UTF-8");
		}else{
			realName = new String(realName.getBytes("UTF-8"),"ISO8859-1");
		}
	}
	response.setContentType = "application/octet-stream;charset=UTF-8";
	response.setHeader("Content-disposition","attachment; filename=" + realName);
	workbook.write(response.getOutputStream());
	workbook.close();
	return;

作者邮箱:1903327874@qq.com

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值