Easyexcel是一款非常好用的POI框架,是为了让开发者快速的实现excel,word,pdf的导入导出,基于Apache poi基础上的一个工具包。
- 基于注解的导入导出,修改注解就可以修改Excel
- 支持常用的样式自定义
- 基于map可以灵活定义的表头字段
- 支持一对多的导出,导入
- 支持模板的导出,一些常见的标签,自定义标签
- 支持HTML/Excel转换
- 支持word的导出,支持图片,Excel
目 录
一、引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
二、在实体类中添加注解
@Data
@HeadRowHeight(30) //表头行高
@ContentRowHeight(15) //内容行高
@ColumnWidth(18) //列宽
@ContentFontStyle(fontHeightInPoints = (short) 12) //字体大小
@ApiModel(value = "ExportEntity", description = "ExportEntity")
public class ExportEntity {
/** id */
@ApiModelProperty(value = "id")
@ExcelProperty("id")
private Long id;
/** 名称 */
@ApiModelProperty(value = "名称")
@ExcelProperty("名称")
private String name;
/** 年龄 */
@ApiModelProperty(value = "年龄")
@ExcelProperty("年龄")
private Integer age;
/** 性别 */
@ApiModelProperty(value = "性别")
@ExcelIgnore
private String sex;
}
默认所有字段都会和excel去匹配,使用@ExcelIgnore注解会忽略该字段。
@ExcelProperty:指定当前字段对应 excel 中的那一列。可以根据名字或者Index去匹配,默认第一个字段就是index=0,以此类推。⚠️要么全部不写,要么全部用index,要么全部用名字去匹配,切勿混合使用。
其他表格样式注解:
@HeadRowHeight(30) 表头行高
@ContentRowHeight(15) //内容行高
@ColumnWidth(18) //列宽
@ContentFontStyle(fontHeightInPoints = (short) 12) //字体大小
三、controller层增加导出接口
@GetMapping("/export")
public void Export(HttpServletResponse response) {
service.export(response);
}
四、在serviceImpl层编写导出表格方法
@Override
public void export(HttpServletResponse response) {
List<Export> list = new ArrayList<>();
for (int i = 1; i <= 3; i++) {
Export export = new Export(i,"张三","20");
list.add(export);
}
try {
//HttpServletResponse消息头参数设置
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
String fileName = "导出列表"+ ".xlsx";
fileName = new String(fileName.getBytes(), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName );
EasyExcel.write(response.getOutputStream(), Export.class)
.autoCloseStream(Boolean.FALSE)
.sheet("导出列表")
.doWrite(list);
} catch (Exception e) {
e.printStackTrace();
}
}