Java根据excel模板填充导出excel

本文介绍了如何在Java项目中使用EasyExcel库导入依赖,处理业务逻辑,如创建Excel模板,填充数据,以及通过HTTP响应发送CSV文件,包括内存管理的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导入依赖:

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>easyexcel</artifactId>
	<version>3.3.2</version>
</dependency>

业务逻辑代码:

List<T> list = new ArrayList<>();
List<T> list1 = new ArrayList<>();
//创建一个模板文件放在resources/file文件夹下
ClassPathResource resource = new ClassPathResource("file/统发工资单.xlsx");

ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(resource.getInputStream()).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();

// 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
// forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
// 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
// 如果数据量大 list不是最后一行 参照下一个
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();

//把list集合里的数据填充到excel中
excelWriter.fill(new FillWrapper("list", list), fillConfig, writeSheet);
excelWriter.fill(new FillWrapper("list1", list1), fillConfig, writeSheet);

//填充excel数据,可填固定数据和运算得到的数据
Map<String, Object> map = new HashMap<String, Object>();
LocalDate now = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String date = now.format(formatter);
map.put("month", "2023");
map.put("year", "8月份");
map.put("num", list.size() + list1.size);
map.put("date", date);

excelWriter.fill(map, writeSheet);

//HttpServletResponse response,前端传入
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");

// 这里URLEncoder.encode可以防止中文乱码
String fileName = URLEncoder.encode("xxxxx考核表", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
excelWriter.finish();

excel模板样例:

 { }中数据用于填充

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今晚不早睡了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值