XLSransformer + 模板 导出 EXCAL

本贴最后更新于 1337 天前,其中的信息可能已经时移世改

@TOC

官网链接 : 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

  • 工具

    子曰:“工欲善其事,必先利其器。”

    273 引用 • 679 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...