91名师指路-头部
91名师指路

easyexcel(十五):使用模板填充excel

由于某些原因,现在不支持支付宝支付,如需要购买源码请加博主微信进行购买,微信号:13248254750

一:引入pom

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


二:填充列表:方案一(将数据一下子全部放到内存中并填充)

2.1)项目中模板的存放位置


2.2)模板注意用{}来表示你要用的变量,如果本来就有"{","}"特殊字符用"\{","\}"代替


2.3)填充列表

/**
* 功能:easyexcel模板填充
* 来源:https://91mszl.com
* @Author: zxb
* @Date: 2023-12-09 11:38:26
*/
@GetMapping("/download")
public void download(HttpServletResponse response) throws IOException {
ClassPathResource resource=new ClassPathResource("template/user.xlsx");
InputStream inputStream=resource.getInputStream();

// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
String fileName = System.currentTimeMillis() + ".xlsx";
response.reset();
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
OutputStream os=response.getOutputStream();

List<UserInfo> dataList=new ArrayList<>();
UserInfo u1=new UserInfo();
u1.setName("张无忌");
u1.setAge(18);
u1.setAddress("上海市青浦区虹桥国际机场1号");

UserInfo u2=new UserInfo();
u2.setName("赵敏");
u2.setAge(20);
u2.setAddress("上海市黄浦区东方明珠大厦100号");

dataList.add(u1);
dataList.add(u2);

// 方案1: 一下子全部放到内存里面 并填充
EasyExcel.write(os).withTemplate(inputStream).sheet().doFill(dataList);

}


2.4)最终效果图


三:填充列表:方案二(分多次填充会使用文件缓存,会省内存)

/**
* 功能:easyexcel模板填充
* 来源:https://91mszl.com
* @Author: zxb
* @Date: 2023-12-09 11:38:26
*/
@GetMapping("/download")
public void download(HttpServletResponse response) throws IOException {
ClassPathResource resource=new ClassPathResource("template/user.xlsx");
InputStream inputStream=resource.getInputStream();

// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
String fileName = System.currentTimeMillis() + ".xlsx";
response.reset();
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
OutputStream os=response.getOutputStream();

List<UserInfo> dataList=new ArrayList<>();
UserInfo u1=new UserInfo();
u1.setName("张无忌");
u1.setAge(18);
u1.setAddress("上海市青浦区虹桥国际机场1号");

UserInfo u2=new UserInfo();
u2.setName("赵敏");
u2.setAge(20);
u2.setAddress("上海市黄浦区东方明珠大厦100号");

dataList.add(u1);
dataList.add(u2);

// 方案2 分多次填充会使用文件缓存(省内存)
try (ExcelWriter excelWriter = EasyExcel.write(os).withTemplate(inputStream).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
excelWriter.fill(dataList, writeSheet);
}

}


四:复杂的填充

4.1)项目中模板的存放位置


4.2)这里需要注意,如果数据是从list中获取则模板中的变量需要加上点号如{.name},如果模板中的变量来自于map则不需要加上点号如{total},这块请结合4.3中标红的代码一起看。


4.3)复杂的填充

/**
* 功能:easyexcel模板填充
* 来源:https://91mszl.com
* @Author: zxb
* @Date: 2023-12-09 11:38:26
*/
@GetMapping("/download")
public void download(HttpServletResponse response) throws IOException {
ClassPathResource resource=new ClassPathResource("template/user.xlsx");
InputStream inputStream=resource.getInputStream();

// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
String fileName = System.currentTimeMillis() + ".xlsx";
response.reset();
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
OutputStream os=response.getOutputStream();

List<UserInfo> dataList=new ArrayList<>();
UserInfo u1=new UserInfo();
u1.setName("张无忌");
u1.setAge(18);
u1.setAddress("上海市青浦区虹桥国际机场1号");

UserInfo u2=new UserInfo();
u2.setName("赵敏");
u2.setAge(20);
u2.setAddress("上海市黄浦区东方明珠大厦100号");

dataList.add(u1);
dataList.add(u2);

try (ExcelWriter excelWriter = EasyExcel.write(os).withTemplate(inputStream).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();
excelWriter.fill(dataList, fillConfig, writeSheet);

Map<String, String> map = new HashMap<>();
map.put("total", "100万");

excelWriter.fill(map, writeSheet);
}
}


4.4)最终效果图






2023-12-09 11:18:11     阅读(615)

名师出品,必属精品    https://www.91mszl.com

联系博主    
用户登录遮罩层
x

账号登录

91名师指路-底部