需求说明:因为项目需求,请求头要做国际化,请求头随时更改,所以请求头为动态!
1.pom.xml文件
<!--easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
2.EasyExcelExportUtils
import com.alibaba.excel.EasyExcel;
import org.apache.commons.lang.StringUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;
/**
* 导出工具类:可以通过easyUtil方法进行导出
* @author 李庆伟
* @date 2022/5/30 18:28
*/
public class EasyExcelExportUtils {
/**
*
* [response, fileName:文件名称, heads:excel表头, list:数据体]
* @return {@link }
* @throws
* @author 李庆伟
* @date 2022/5/31 15:10
*/
public static void easyUtil(HttpServletResponse response,String fileName,List<String> heads,List<Map<String, Object>> list)
throws IOException {
if (StringUtils.isEmpty(fileName)){ //文件名称也可以动态获取
fileName = System.currentTimeMillis() + ".xlsx";
} else {
fileName = fileName + ".xlsx";
}
if(heads == null || heads.size() == 0){
heads = makeHeads();
}
if(list == null || list.size() == 0){
list = makeData();
}
OutputStream os= responseInfo(response, fileName); // 调用responseInfo方法
List<List<String>> hs = new ArrayList<>();
for (String s : heads) {
hs.add(Arrays.asList(s));
}
List<List<Object>> list2 = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
List<Object> objects = new ArrayList<>();
Collection<Object> values = list.get(i).values();
for (Object value : values) {
objects.add(value.toString());
}
list2.add(objects);
}
EasyExcel.write(os).head(hs).sheet("模板(sheet名字)").doWrite(list2);
System.out.println("导出成功");
}
private static List<String> makeHeads() {
List<String> heads = new ArrayList<>(); //表头信息
heads.add("唯一标识");
heads.add("名称");
heads.add("类型");
return heads;
}
private static List<Map<String, Object>> makeData() {
List<Map<String, Object>> list = new ArrayList<>();
//
Map<String,Object> test1 = new LinkedHashMap<>(); //手动添加测试数据(可根据需要从数据库查询)
test1.put("id", 1);
test1.put("name", 2);
test1.put("str", 3);
list.add(test1);
//
Map<String,Object> test2 = new LinkedHashMap<>();
test2.put("id", 11);
test2.put("name", 22);
test2.put("str", 33);
list.add(test2);
return list;
}
/**
* 功能:公用方法,写回浏览器
* [response, fileName]
* @return {@link OutputStream}
* @throws
* @author 李庆伟
* @date 2022/5/31 16:23
*/
public static OutputStream responseInfo(HttpServletResponse response, String fileName) throws IOException {
// 这里注意有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment; filename*=utf-8''" + fileName);
OutputStream os=response.getOutputStream();
return os;
}
/**
* 如果要兼容swagger用这个,上面的注释掉
* 功能:公用方法
* 参数:fileName 文件名称, 如:123.xlsx
public static OutputStream responseInfo(HttpServletResponse response, String fileName) throws IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("APPLICATION/OCTET-STREAM");
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
OutputStream os=response.getOutputStream();
return os;
}
*/
}
3.EasyExcelController
/**
* 动态导出
* [response]
* @return {@link }
* @throws
* @author 李庆伟
* @date 2022/5/31 14:43
*/
@GetMapping("toOut")
public void testExcel1(HttpServletResponse response) throws IOException {
EasyExcelExportUtils.easyUtil(response,"12345",null,null);
}
/**
* 动态导出,兼容swagger,如果使用swagger放开注释,注释掉上面代码
* [response]
* @return {@link }
* @throws
* @author 李庆伟
* @date 2022/5/31 14:43
@GetMapping("toOut")
@ApiOperation(value = "导出全部", notes = "导出全部", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public void testExcel1(HttpServletResponse response) throws IOException {
EasyExcelExportUtils.easyUtil(response,"12345",null,null);
}
*/
记录一点。。。。。。。。。。。。。。。。