1 介绍
Each命令用于迭代集合,克隆命令XlsArea。类似于Java语言的for操作符。
2 命令属性
Each命令有以下属性:
- var:迭代时,将集合中的每个条目放入Context中的那个键上。
- items:要迭代的集合在Context中的键值。
- area:Each命令体的XlsArea。
- direction:Direction枚举,有效值是DOWN和RIGHT,表示如何(通过行或列)重复命令体。默认为DOWN。
- select:迭代过程中过滤集合条目的选择表达式。
- groupBy:分组属性。
- groupOrder:分组排序方式(‘desc’或‘asc’)。
- cellRefGenerator:是否创建目标单元格引用的自定义策略。
- multisheet:Context中sheet名称列表的键。
- lastCell:命令指向的最后一个单元格。
var和items是必须的。
3 构建命令
3.1 使用Java API构建
// 创建Transformer和departments集合// ...// 创建department XlsAreaXlsArea departmentArea = new XlsArea("Template!A2:G13", transformer);// 创建Each命令迭代departments集合,链接到departmentAreaEachCommand departmentEachCommand = new EachCommand("department", "departments", departmentArea);
3.2 使用Excel标记构建
为了使用Excel标记创建Each命令,在命令体区域开始单元格的注释中使用特殊语法:
jx:each(items="employees" var="employee" lastCell="D4")
因此,我们使用jx:each和括号中空格隔开的命令属性。lastCell属性定义命令的XlsArea体的最后一个单元格。
3.3 使用XML配置构建
为了使用XML配置创建Each命令,使用以下标记:
ref属性定义Each命令相关的区域。内部区域定义Each命令体。通常是相同的。
4 复制方向
默认,Each命令direction属性设置为DOWN表示命令体基于Excel行向下克隆。
如果你需要通过列克隆区域,应该设置属性值为RIGHT。
Java API通过以下方式设置:
//... 创建EachCommand迭代departments// 设置direction为RIGHTdepartmentEachCommand.setDirection(EachCommand.Direction.RIGHT);
5 分组数据
Each命令支持通过groupBy属性分组。groupOrder属性设置排序方式,有效值为desc或asc。
jx:each(items="employees" var="myGroup" groupBy="name" groupOrder="asc" lastCell="D6")
在例子中,每个组可以使用myGroup引用。
当前组条目可以使用myGroup.item引用。因此,可以使用以下方式引用员工姓名:
${myGroup.item.name}
通过items属性访问分组中的所有条目:
jx:each(items="myGroup.items" var="employee" lastCell="D6")
你也可以跳过var属性,默认组变量名称为_group。