采用alibaba的excel到处方式,最基本的注解指定列信息value :列名称,index:第几列,还有很多注解这里先不写了。
@ExcelProperty(value = "公司名称", index = 0)
@GetMapping("/cityHiddenExport")
public void cityHiddenExport(HttpServletResponse response) throws IOException {
List<XfCountyHazardStatisticsJob> list = indexService.cityHiddenExport(response);
OutputStream outputStream = response.getOutputStream();
try {
//设置内容类型
response.setContentType("application/vnd.vnd.ms-excel");
//设置编码格式
response.setCharacterEncoding("utf-8");
//设置导出文件名称(避免乱码)
String fileName = URLEncoder.encode("隐患文件".concat(".xlsx"), "UTF-8");
// 设置响应头
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName);
//这个实现方式非常简单直接,使用EasyExcel的write方法将查询到的数据进行处理,以流的形式写出即可
EasyExcel.write(outputStream, XfCountyHazardStatisticsJob.class)//对应的导出实体类
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 设置自适应列宽
.registerWriteHandler(new AbstractColumnWidthStyleStrategy() {
@Override
protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
// 设置居中
CellStyle cellStyle = cell.getCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER); // 水平居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中
cell.setCellStyle(cellStyle);
}
})
.excelType(ExcelTypeEnum.XLSX)//excel文件类型,包括CSV、XLS、XLSX
.sheet("隐患列表")//导出sheet页名称
.doWrite(list); //查询获取的数据集合List<T>,转成excel
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
outputStream.flush();
outputStream.close();
}
}