最近我的项目增加了一个需求,需要将数据库中的数据导出到excel表格中,再下载下来。而生成Excel比较有名的框架有Apache poi等,网络上介绍其使用方法的文章也很多,但是我今天使用的是阿里出的easyexcel框架,我个人感觉使用起来更简单便捷,GitHub地址
导入maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
导出excel
entity对象类
@Data
public class TabExcelProperty {
//设置excel表头名称
@ExcelProperty(value = "用户id",index = 0)
private Integer id;
@ExcelProperty(value = "用户名",index = 1)
private String name;
@ExcelProperty(value = "年龄",index = 2)
private Integer age;
@ExcelProperty(value = "性别",index = 3)
private String sex;
@ExcelProperty(value = "手机电话",index = 4)
private String phone;
}
value表示列的名称,index表示是第几列。
数据库中表的数据
Service类
@Service
public class ExportServiceImpl implements ExportService{
@Autowired
ExportMapper exportMapper;
@Override
public void exportExcel(HttpServletResponse response) {
//查询表中的数据
List<TabExcelProperty> list = exportMapper.getUser();
try {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("测试文件", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), TabExcelProperty.class).sheet("表格1").doWrite(list);
} catch (IOException e) {
e.printStackTrace();
}
}
}
通过mapper的exportMapper.getUser()方法查询出数据表中的数据,然后用EasyExcel.write写入响应对象中。
然后Controller直接调用就行。