一、问题出现
最近需要实现Excel文件的导出,于是乎选择了EasyExcel组件来做这件事。
二、代码实现
·1、依赖导入
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
2、controller实现类
/**
* 文件下载Controller类
*/
@Slf4j
@Controller
public class FileController {
/**
* 文件下载
*/
@GetMapping("/download")
@ResponseBody
public void download(HttpServletResponse response){
try{
// 设置头部信息和编码
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// URLEncoder.encode防止中文乱码
String filName = URLEncoder.encode("导出的文件", "utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + filName +".xlsx");
// 待导出列表数据,以下就不搞数据上去了,主要是减少代码~~~
List<MyExcelDTO> list = new ArrayList<>();
EasyExcel.write(response.getOutputStream(), MyExcelDTO.class).sheet("第一页").doWrite(list);
}catch(IOException e){
e.printStackTrace();
}
}
}
3、MyExcelDTO实体类
@ExcelIgnore,文件在导出时会忽略该成员变量
@ColunmWidth,设置该成员变量在表格里的列宽
@ExcelProperty,指定该成员变量在表格里的表头名称,以及在第几列
/**
* Excel实体类
*/
@Data
public class MyExcelDTO implements Serializable {
/**
* 主键id
*/
@ExcelIgnore
private Long id;
/**
* 键
*/
@ColumnWidth(40)
@ExcelProperty(value = "key", index = 0)
private Long id;
/**
* 值
*/
@ColumnWidth(40)
@ExcelProperty(value = "value", index = 1)
private String value;
/**
* 是否刪除
*/
@ExcelIgnore
private Integer isDelete;
/**
* 編輯時間
*/
@ExcelIgnore
private Date editTime;
/**
* 創建時間
*/
@ExcelIgnore
private Date createTime;
/**
* 備註
*/
@ColumnWidth(40)
@ExcelProperty(value = "remark", index = 2)
private String remark;
}