JXLS生成Excel中循环的两种用法

        在jxls操作excel文件一文中,提到可以使用<jx:forEach>进行迭代处理,JXLS中还有另一种循环方式,且看如下示例。

        Excel模板如下所示:


        现有类Staff,内容如下所示:

/**
 * 
 */
package com.geloin.jxls.beans;

/**
 * @author Geloin
 * 
 */
public class Staff {

	public Staff(String name, Double payment, Double bonus) {
		super();
		this.name = name;
		this.payment = payment;
		this.bonus = bonus;
	}

	/**
	 * 名称
	 */
	private String name;

	/**
	 * 薪资
	 */
	private Double payment;

	/**
	 * 年终奖
	 */
	private Double bonus;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Double getPayment() {
		return payment;
	}

	public void setPayment(Double payment) {
		this.payment = payment;
	}

	public Double getBonus() {
		return bonus;
	}

	public void setBonus(Double bonus) {
		this.bonus = bonus;
	}

}

        有类Department,如下所示:

/**
 * 
 */
package com.geloin.jxls.beans;

import java.util.List;

/**
 * @author Geloin
 * 
 */
public class Department {

	/**
	 * 名称
	 */
	private String name;

	/**
	 * 职员
	 */
	private List<Staff> staffs;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<Staff> getStaffs() {
		return staffs;
	}

	public void setStaffs(List<Staff> staffs) {
		this.staffs = staffs;
	}

}

        如上所示,Department中有一个属性staffs,表示的是本部门的职员列表,这个属性是一个List<Staff>类型的对象,现在我们为上文中的模板填充内容:

/**
 * 
 */
package com.geloin.jxls.main;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.jxls.transformer.XLSTransformer;

import com.geloin.jxls.beans.Department;
import com.geloin.jxls.beans.Staff;

/**
 * @author Geloin
 * 
 */
public class DepartmentTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		String tplPath = "d:/work/proTmp/jxls/部门信息表模板.xlsx";
		String destPath = "d:/work/proTmp/jxls/部门信息表.xlsx";

		Department dept1 = new Department();
		dept1.setName("信息部");
		List<Staff> staffs = new ArrayList<Staff>();
		staffs.add(new Staff("张三", 5000D, 2000D));
		staffs.add(new Staff("李四", 6000D, 3000D));
		dept1.setStaffs(staffs);

		Department dept2 = new Department();
		dept2.setName("信息部");
		List<Staff> staffs2 = new ArrayList<Staff>();
		staffs2.add(new Staff("王五", 7000D, 4000D));
		staffs2.add(new Staff("何六", 8000D, 5000D));
		dept2.setStaffs(staffs2);

		Map<String, Department> beanParams = new HashMap<String, Department>();
		beanParams.put("dept", dept1);

		XLSTransformer former = new XLSTransformer();
		former.transformXLS(tplPath, beanParams, destPath);

	}

}

        你会看到生成的Excel表格如下所示:


        如上文中所描述,通过${dept.staffs.name},我们取到了dept对象中,每个员工的名称,显然,通过dept.staffs.proName,我们迭代了Department中的staffs对象。

        模板中还有一个特殊的地方——$[sum(C2:E2)]//dept.staffs,我们已经知道,$[sum(c2:e2)]计算的是第2行C至E列的和,而//dept.staffs可以理解为per dept's staffs,也就是说,$[sum(C2:E2)]//dept.staffs表示的是“统计部门的每个staffs对象的从C到E列的和”。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Jxls 是一个开源的 Java 库,用于导出 Excel 文件,它可以在 Java 非常方便地进行使用。下面是使用 Jxls 导出 Excel 的步骤: 1. 添加依赖 在 pom.xml 文件添加以下依赖: ```xml <dependency> <groupId>org.jxls</groupId> <artifactId>jxls-core</artifactId> <version>1.0.15</version> </dependency> ``` 2. 准备 Excel 模板 在 Excel 文件准备好要导出的内容,包括表头和数据部分。可以在表格使用 ${} 来标记需要动态替换的数据。 3. 准备数据 在 Java 代码准备好要导出的数据,可以使用 List 或者 Map 等类型来保存数据。 4. 创建模板引擎 使用 Jxls 提供的模板引擎创建一个模板,可以使用以下代码: ```java InputStream is = new FileInputStream(new File("template.xls")); Workbook workbook = WorkbookFactory.create(is); Transformer transformer = TransformerFactory.createTransformer(workbook, outputStream); ``` 其,“template.xls”是你准备好的 Excel 模板文件名,outputStream 是导出文件的输出流。 5. 填充数据 使用 Jxls 提供的 API 填充数据,可以使用以下代码: ```java Map<String, Object> beans = new HashMap<>(); beans.put("dataList", dataList); transformer.transformXLS(new HashMap<>(), beans); ``` 其,“dataList”是你准备好的数据,transformer.transformXLS() 方法将会把数据填充到模板。 6. 输出文件 使用 Jxls 提供的 API 输出文件,可以使用以下代码: ```java transformer.flush(); outputStream.close(); ``` 这样就可以将 Excel 文件导出到 outputStream 了。 以上是使用 Jxls 导出 Excel 的基本步骤,你可以根据自己的需求进行更多的调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值