Easyexcel是一款非常好用的POI框架,是为了让开发者快速的实现excel,word,pdf的导入导出,基于Apache poi基础上的一个工具包。
- 基于注解的导入导出,修改注解就可以修改Excel
- 支持常用的样式自定义
- 基于map可以灵活定义的表头字段
- 支持一对多的导出,导入
- 支持模板的导出,一些常见的标签,自定义标签
- 支持HTML/Excel转换
- 支持word的导出,支持图片,Excel
目 录
一、引入依赖
二、在实体类中添加注解
三、controller层增加导出接口
四、在serviceImpl层编写导出表格方法
五、访问接口,下载表格
一、引入依赖
<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 = "性别")@ExcelIgnoreprivate 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层编写导出表格方法
@Overridepublic 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();}}