导出excel利用了阿里的easyExcel,官方地址EasyExcel · 语雀快速、简单避免OOM的java处理Excel工具https://www.yuque.com/easyexcel
利用了填充功能,可以导出比较复杂的excel表格
1.导入maven
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.1</version>
</dependency>
2.编写模板,并放到你想放的位置。
3.编写代码
@RequestMapping("/export")
@ResponseBody
public void export1(HttpServletResponse response){
//模板文件编译后的位置
String path = Thread.currentThread().getContextClassLoader().getResource("").getPath()+ "demo/"+ "simple.xlsx";
String filename = null;
try {
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
filename = URLEncoder.encode("信息表"+System.currentTimeMillis(), "utf-8");
//ExcelWriter excelWriter = EasyExcel.write(filename).withTemplate(templateFileName).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
//使用response.getOutputStream()下载,并使用项目下的模板填充
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(path).build();
Map<String,Object> map = new HashMap<>();
List<User> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setName("张三");
user.setEmail("11784@qq.com");
user.setAge(111);
list.add(user);
}
//放入数据
map.put("date", new Date());
map.put("title","学生信息表");
if(map!=null){
excelWriter.fill(map, writeSheet);//存入map
}
if(list!=null){
excelWriter.fill(list, writeSheet);//存入list
}
//下载
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + filename + ".xls");
//必须要finish才会写入,不finish只会创建一个empty的文件。
excelWriter.finish();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
4.执行结果