hutool+poi库+excel导出
网上博客一大推,却没有几个能用的,结合自己实际开发中遇到所写笔记。有不明白的可以直接留言。
- 直接开始引入依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.8</version>
</dependency>
引入poi库
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
mapper层
service层忽略,自己实际开发中写
就是一个查询
所写导出功能在controller层
2.我是下载了hutool的工具类
//获取到的数据
List<Map<String, Object>> hourEx = alarmCellDetailHourService.getAlarmCellDetailHourEx();
ExcelWriter writer = ExcelUtil.getWriter();
writer.addHeaderAlias("dt", "时间");
writer.addHeaderAlias("province", "省份");
writer.addHeaderAlias("city", "城市");
writer.addHeaderAlias("user_label", "小区名称");
writer.addHeaderAlias("type", "类型");
writer.addHeaderAlias("scene", "场景");
//接收数据
writer.write(hourEx, true);
//指定字符集
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//指定下载名字拼接,主要是前台传进来的数据
String name = type + period;
name = URLEncoder.encode(name, String.valueOf(StandardCharsets.UTF_8));
response.setHeader("Content-Disposition", "attachment;filename=" + name + ".xls");
ServletOutputStream out = null;
try {
out = response.getOutputStream();
writer.flush(out, true);
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭writer
writer.close();
}
//关闭输出Servlet流
IoUtil.close(out);
这样就可以了
下面是官网上的内容可做参考
// 通过工具类创建writer,默认创建xls格式
ExcelWriter writer = ExcelUtil.getWriter();
// 一次性写出内容,使用默认样式,强制输出标题
writer.write(rows, true);
//out为OutputStream,需要写出到的目标流
//response为HttpServletResponse对象
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content-Disposition","attachment;filename=test.xls");
ServletOutputStream out=response.getOutputStream();
writer.flush(out, true);
// 关闭writer,释放内存
writer.close();
//此处记得关闭输出Servlet流
IoUtil.close(out);
设置颜色
//设置颜色
// 定义单元格背景色
StyleSet style = writer.getStyleSet();
// 第二个参数表示是否也设置头部单元格背景
style.setBackgroundColor(IndexedColors.RED, false);
合并单元格后的标题行,使用默认标题样式
// 合并单元格后的标题行,使用默认标题样式
writer.merge(11,"4g预警小时");