EasyPoi模板导出(一对多导出)

前言

有时候存在子表数据时,需要导出子表数据。

一、代码实现

1.引入库

代码如下(示例):

import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;

2.逻辑代码

代码如下(示例):

public void export(ProduceCostOther produceCostOther, HttpServletRequest request, HttpServletResponse response) {
        // 定义导出内容
        Map<String,Object> paramMap = Maps.newHashMap();
        // 获取list列表
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("del_flag", CommonConstant.STATUS_0);
        if(StringUtils.isNotBlank(produceCostOther.getCompanyId())){
            queryWrapper.eq("company_id", produceCostOther.getCompanyId());
        }
        if(StringUtils.isNotBlank(produceCostOther.getIds())){
            queryWrapper.in("id", Arrays.asList(produceCostOther.getIds().split(CommonConstant.ARRAY_SEPARATOR)));
        }
        queryWrapper.orderByDesc("create_time");
        List<ProduceCostOther> list = this.list(queryWrapper);
        if(CollectionUtil.isNotEmpty(list)){
            int num = 1;
            for (ProduceCostOther le : list) {
                // 序号
                le.setNumIndex(num);
                // 查找list
                ProduceCostOtherField otherField = new ProduceCostOtherField();
                otherField.setZid(le.getId());
                le.setDataList(fieldService.findDataList(otherField));
                num++;
            }
        }
        paramMap.put("list", list);
        // 增加一个空的list防止模板空指针异常
        if(paramMap.get("list") == null){
            ArrayList<String> emptyList = new ArrayList<>();
            emptyList.add("");
            paramMap.put("list",emptyList);
        }
        String fileName = "其他生产成本.xlsx";
        String templatePath = upLoadPath + File.separator + TEMPLE_URL + File.separator +  "other/produceCostOther.xlsx";
        File folder = new File(upLoadPath + File.separator + TEMPLE_URL + File.separator + "other");
        // 文件夹不存在则创建文件夹
        if(!folder.exists()){
            folder.mkdirs();
        }
        // 文件不存在 则联系管理员添加导出模板
        File file = new File(templatePath);
        if(!file.exists()){
            throw new JeecgBootException("导出模板不存在,请联系管理员在【" + templatePath + "】路径添加导出模板!");
        }
        try {
            TemplateExportParams exportParams = new TemplateExportParams(templatePath);
            Workbook workbook = ExcelExportUtil.exportExcel(exportParams, JSONObject.parseObject(JSON.toJSON(paramMap).toString(), Map.class));
            // 表格单元格为实线
            Sheet firstSheet = workbook.getSheetAt(0);
            List<CellRangeAddress> mergedRegions = firstSheet.getMergedRegions();
            for (CellRangeAddress mergedRegion : mergedRegions) {
                RegionUtil.setBorderBottom(BorderStyle.THIN, mergedRegion, firstSheet);
                RegionUtil.setBorderTop(BorderStyle.THIN, mergedRegion, firstSheet);
                RegionUtil.setBorderLeft(BorderStyle.THIN, mergedRegion, firstSheet);
                RegionUtil.setBorderRight(BorderStyle.THIN, mergedRegion, firstSheet);
            }
            response.addHeader("filename", URLEncoder.encode(fileName,"utf-8"));
            response.addHeader("Access-Control-Expose-Headers","filename");
            response.setHeader("Content-disposition", "attachment; fileName=" + URLEncoder.encode(fileName, "utf-8"));
            OutputStream out = response.getOutputStream();
            workbook.write(out);
            out.flush();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

示例
EasyPoi模板导出(一对多导出)_第1张图片
EasyPoi模板导出(一对多导出)_第2张图片


你可能感兴趣的:(java)