111111111111111111111111111111
第一个方法:
@ApiOperation("导出")
@GetMapping("/export")
public void export(HttpServletResponse response,实体类 eDo) {
try {
//导出的文件名拼接
String quarter = earningsCountDo.getYears() + ((earningsCountDo.getQuarter() != null && !"".equals(earningsCountDo.getQuarter())) ? ("第" + earningsCountDo.getQuarter() + "季度") : "") + "收益分析列表";
//文档里面的表头
//年和季度,表头,文件名
String quarter =这是表头;
List<List<String>> list = new ArrayList<List<String>>();//这是存放的字段名
List<String> fxindex = new ArrayList<String>();//这是存放表头
//…………………………
//………………//处理数据 把查出来的数据存放到各自对应的list里面
//导出
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
//文件名
String fileName = URLEncoder.encode(quarter(这是表头 (删除)), "UTF-8").replace("\\+", "%20");//这是文件名
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");//fileName是文件名
EasyExcel.write(response.getOutputStream()).head(list).sheet(quarter).registerWriteHandler(new SimpleColumnWidthStyleStrategy(15)).doWrite(list1);
//list是字段名 quarter是表名 list1是数据
} catch (Exception e) {//异常处理
response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
try {
response.getWriter().println(JSON.toJSONString(DtoResult.error("下载文件失败")));
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
带表格的
EasyExcel.write(response.getOutputStream()).head(list).sheet(quarter).registerWriteHandler(new SimpleColumnWidthStyleStrategy(15)).registerWriteHandler(cellBorder()).doWrite(list1);
查询出来:
22222222222222222
第二个方法:模版导出
模版位置:
controller层:
先查处导出信息,然后调用模版导出
@ApiOperation("导出")
@GetMapping(value = "/download")
public void download(HttpServletResponse response, ConstructionDrawingQuery criteria) throws IOException {
drawingService.download(drawingService.queryAllExcel(criteria), response);
}
//drawingService.queryAllExcel(criteria) 返回一个list的实体类数据
然后接口就不写出来了 直接写实现类
@Override
public void download(List<ConstructionDrawingDto> dataList, HttpServletResponse response) throws IOException {
//首先封装excel数据用的list 用map来存放每条数据
List<Map<String, Object>> list = new ArrayList<>();
int xh = 0;//导出的序号
for (ConstructionDrawingDto drawing : dataList) {
//声明用来封装数据的map 将每条数据用map存放 最后放到list中
Map<String, Object> map2 = new LinkedMap();
//放入数据
map2.put("xh", ++xh);
map2.put("companyName", drawing.getCompanyname());//单位
map2.put("projectName", drawing.getProjectName());//项目名称
map2.put("projectStatusName", drawing.getProjectStatusName());//项目状态
map2.put("engineeringTypeName", drawing.getEngineeringTypeName());//工程类别
map2.put("projectG", drawing.getProjectG());//项目承接模式
map2.put("allContracts", drawing.getAllContracts());//合同额或工程结算造价(万元)
map2.put("zszb", drawing.getZszb());//其中:自施合同额(万元)
map2.put("projectSize", drawing.getProjectSize());//建筑面积(m2)
// map2.put("承包范围", drawing.getPlanStartTime());
map2.put("drawingDistributeDate", DateUtils.format(drawing.getDrawingDistributeDate(),DateUtils.FORMAT_SHORT));//图纸下发日期
map2.put("isStage", drawing.getIsStage());//是否分阶段编制
map2.put("planDate", DateUtils.format(drawing.getPlanDate(),DateUtils.FORMAT_SHORT));//计划完成日期
map2.put("actualDate", DateUtils.format(drawing.getActualDate(),DateUtils.FORMAT_SHORT));//实际完成日期
map2.put("reason", drawing.getReason());//未按时完成原因
map2.put("amount", drawing.getAmount());//施工图预算金额
map2.put("approveName", drawing.getCostSquareMeter());//平米造价
map2.put("costSquareMeter", drawing.getCostSquareMeter());//是否报送业主
map2.put("submitAmount", drawing.getSubmitAmount());//报送值(万元)
map2.put("confirmAmount", drawing.getConfirmAmount());//业主确认值(万元)
map2.put("disputeAmount", drawing.getDisputeAmount());//争议值(万元)
map2.put("remark", drawing.getRemark());//备注
map2.put("planDate", DateUtils.format(drawing.getPlanDate(),DateUtils.FORMAT_SHORT));//审批通过时间
map2.put("appoveaDate", drawing.getApproveName());//审批状态
list.add(map2);
}
//调用工具类 普通模版导出 暂时不用
// com.riching.cloud.common.utils.FileUtils.downloadExcel(list, response);
//新模版导出 将list里面的数据放入一个map中
Map<String, Object> map = new HashMap<>();
String title;
String name;
TemplateExportParams tparams = new TemplateExportParams("template/Cbt127_Construction_Drawing_Budget.xlsx");
String[] sheetName = {"施工图"};//这个是模版存放的位置
//进行一些转换后最后导出
tparams.setSheetName(sheetName);
title = "施工图";
name =title+".xls";
map.put("list",list);
String fileName = new String(name.getBytes("GB2312"), StandardCharsets.ISO_8859_1);
response.setContentType("application/vnd.ms-excel");
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
Workbook workbook = ExcelExportUtil.exportExcel(tparams, map);
OutputStream outStream = null;
try {
outStream = response.getOutputStream();
workbook.write(outStream);
} catch (IOException e) {
e.printStackTrace();
}finally {
outStream.close();
}
}
上面放入map的也可以不一个一个拿出来 直接在list里面放入map就可以。
一下子导出多个模版的
1、、查出来放在一个map里面