1、创建实体类
在实体类上加注解.@ExcelProperty
.@ExcelProperty中一下值为可选值。value为生成Excel的列的名称。index为指定列为那一列(编号从0开始)。
生成的Excel格式调整参考一下链接。(引用大佬链接)
2、封装
可以自己封装方法,将公共代码形成一个类。(后续更新其他方法)此时可在controller或service层直接使用此方法。或者也可将此代码直接用在controller或service。
package com.cgnpc.imscqp.quantitiesstatistics.excelexport;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.util.DateUtils;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.cgnpc.imscqp.common.dict.FieldExcelActionUtil;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
@Slf4j
public class EasyExcelUtilsExport {
public static void writeWeb(String fileName, final Class<?> clazz, List<?> dataList, String sheetName, HttpServletResponse response) throws IOException {
// 1.指定响应体内容类型
response.setContentType("application/vnd.ms-excel");
// 2.指定编码方式
response.setCharacterEncoding("utf-8");
// 3.指定表名
StringBuffer sb = new StringBuffer();
try {
//中文处理(防止中文乱码)
String encode = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
sb.append(encode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
// log.error("", e);
} finally {
sb.append("_");
sb.append(DateUtils.format(new Date(), DateUtils.DATE_FORMAT_14));
sb.append(".xlsx");
}
// 4.指定响应标头
//设置表名
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + sb);
// 5.获取工作簿对象的输出流
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
// 6.设置工作表的名称
if (!StringUtils.isBlank(sheetName)) {
sheetName = "sheet1";
}
// 7.指定写用哪个class去写
WriteSheet writeSheet = EasyExcel.writerSheet(0, sheetName).head(clazz).build();
// 8.将 dataList 中的数据逐行写入工作表中
excelWriter.write(dataList, writeSheet);
// 9.finish关闭流
excelWriter.finish();
// 10.关闭流
response.getOutputStream().close();
}
}
。