原先导出是根据easyexcel注解@ExcelProperty实现的,现在用户觉得导出列手机号不好听,要自定义,如何解决呢?(给他来一刀)直接上代码:
实体类
@Data
public class SysUserVO implements Serializable {
/**
* id
*/
private Integer id;
/**
* 昵称
*/
private String nickName;
/**
* 手机号
*/
@ExcelProperty(value = "手机号")
private String phone;
/**
* 帐号
*/
private String account;
/**
* 性别 0女 1男
*/
private Integer gender;
/**
* 邮箱
*/
private String email;
/**
* 头像链接
*/
private String avatarUrl;
/**
* 用户登录态
*/
private String token;
}
Controller
@GetMapping("/export")
public void export(HttpServletResponse response) throws IOException {
// 用户自定义表头,模拟前端传值
List<String> list = new ArrayList<>();
List<String> list2 = new ArrayList<>();
list.add("用户名");
list2.add("座机");
List<List<String>> fieldListHead = new ArrayList<>();
fieldListHead.add(list);
fieldListHead.add(list2);
//表头对应实体类字段
List<String> keys = new ArrayList<>();
keys.add("account");
keys.add("phone");
//模拟查询数据库
List<SysUserVO> result = new ArrayList<>();
SysUserVO vo = new SysUserVO();
vo.setAccount("123");
vo.setPhone("1008611");
result.add(vo);
exportExcel(response,fieldListHead,keys,result,"台账.xlsx",SysUserVO.class);
}
工具类
public static <T> void exportExcel(HttpServletResponse response, List<List<String>> head,List<String> keys,List<T> data,
String fileName,Class<T> tClass) throws IOException {
//设置响应头,指定为Excel文件下载
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
// 动态设置列字段
ExcelWriterBuilder writerBuilder = EasyExcel.write(response.getOutputStream())
.head(head).autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.excelType(ExcelTypeEnum.XLSX);
List<List<String>> dataList = data.stream()
.map(goods -> {
List<String> rowData = new ArrayList<>();
keys.forEach(h -> {
try {
Field field = tClass.getDeclaredField(h);
field.setAccessible(true);
Object value = field.get(goods);
rowData.add(value != null ? value.toString() : "");
} catch (NoSuchFieldException | IllegalAccessException e) {
log.error(e.toString());
}
});
return rowData;
})
.collect(Collectors.toList());
writerBuilder.sheet().doWrite(dataList);
}
pom.xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
效果如下: