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();
        }
    }

示例
在这里插入图片描述
在这里插入图片描述


  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
easypoi是一个用于Excel和Word文档操作的Java库。它提供了简单易用的API,可以通过模板导出Excel文件。下面是使用easypoi进行模板导出的示例代码: 1. 导入easypoi的maven坐标: ```xml <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>4.2.0</version> </dependency> ``` 2. 在Spring Boot的配置文件(bootstrap.yml或application.yml)中配置模板的URL: ```yaml easypoi: template: 'http://www.xxx.cn/statics/template/port.xlsx' ``` 3. 使用easypoi进行模板导出: ```java import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import org.apache.poi.ss.usermodel.Workbook; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.util.HashMap; import java.util.Map; public class TemplateExportDemo { public static void main(String[] args) throws IOException { // 模板文件的URL String templateUrl = "http://www.xxx.cn/statics/template/port.xlsx"; // 下载模板文件 URL url = new URL(templateUrl); URLConnection connection = url.openConnection(); InputStream inputStream = connection.getInputStream(); // 加载模板文件 Workbook workbook = ExcelExportUtil.importExcel(inputStream); // 创建模板参数 TemplateExportParams params = new TemplateExportParams(); params.setSheetNum(0); // 指定导出的Sheet页 // 创建数据模型 Map<String, Object> dataModel = new HashMap<>(); dataModel.put("name", "John"); dataModel.put("age", 25); // 导出Excel文件 FileOutputStream outputStream = new FileOutputStream("output.xlsx"); ExcelExportUtil.exportExcel(params, dataModel, workbook.getSheetAt(params.getSheetNum()), outputStream); // 关闭流 outputStream.close(); inputStream.close(); } } ``` 这段代码会从指定的URL下载模板文件,然后根据模板和数据模型生成新的Excel文件。你可以根据自己的需求修改模板文件和数据模型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值