Springboot + EasyExcel 实现复杂表格导出 一对一 一对多

  • 准备工作把自己需要需要导出的表格  
  • 第一行为一个一对多的数据结构 在需要填入值的框里 {属性名}
  • 第三行以后对应的为一个数组  {.属性名}

准备工作做好以后把表格(.xlxs)放入静态资源文件夹里面  

代码如下

 @Override
    public ResultDTO downloadOfferList(OfferDownlod bc31) throws Exception {
        List<OfferDownlod> dataset = null;
        //一对一的数据
        Map<String, Object> map = new HashMap<>();
        map.put("Businesstype", "C3-人民币跨行代付(多对多)");
        map.put("Outaccount",bc31.getBab084());//转出账号
        map.put("Bizhon", "CNY-人民币");
        map.put("BusinessSummary", "EV-工资");
        String fileName="";
        //数组的数据来源
        dataset = bc31Mapper.queryBpBc31List(bc31);
        //刚刚准备好的表格文件
        fileName="/file/hangwai.xlsx";
       
        if(!StringUtils.isEmpty(dataset)){
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            InputStream inputStream = this.getClass().getResourceAsStream(fileName);
            ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletResponse response = sra.getResponse();
            response.setContentType("multipart/form-data;charset=UTF-8");
            response.setHeader("Accept-Language", "zh-cn");
            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("基础信息.xlsx", "UTF-8"));

            OutputStream os = response.getOutputStream();
            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
            ExcelWriter excelWriter = EasyExcel.write(os).withTemplate(inputStream).build();
            //创建第一个sheet
            WriteSheet bc09Sheet = EasyExcel.writerSheet("Sheet1").build();
            //填充
            excelWriter.fill(dataset, fillConfig, bc09Sheet);
            excelWriter.fill(map, bc09Sheet);
            excelWriter.finish();
     
            return new ResultDTO(0, "查询成功");
        }else{
            return new ResultDTO(0,"查询成功,暂无数据");
        }

    }

 下载文件得

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 EasyExcel 导出一对多数据时,需要使用 EasyExcel 提供的注解 @ExcelIgnore 和 @ExcelProperty 来指定导出的表头和数据内容。以下是一个示例代码: ```java public class ExportData { @ExcelProperty("姓名") private String name; @ExcelIgnore private List<String> courses; public ExportData(String name, List<String> courses) { this.name = name; this.courses = courses; } // getter 和 setter 方法 } ``` 在这个示例中,我们使用了 @ExcelIgnore 注解来忽略 courses 字段的导出,同时使用 @ExcelProperty 注解来指定 name 字段的导出表头为 “姓名”。 接下来,在 EasyExcel 的写入方法中,我们可以通过循环来遍历每个 ExportData 对象的 courses 列表,并依次输出到 Excel 表格中。示例代码如下: ```java // 创建 ExcelWriter 对象 ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build(); // 创建 Sheet 对象 Sheet sheet = new Sheet(1, 0, ExportData.class); // 写入表头 List<String> head = new ArrayList<>(); head.add("姓名"); head.add("课程"); excelWriter.write(new RowData(head)); // 写入数据 List<ExportData> dataList = getDataList(); for (ExportData data : dataList) { List<String> row = new ArrayList<>(); row.add(data.getName()); for (String course : data.getCourses()) { row.add(course); excelWriter.write(new RowData(row)); row.clear(); } } // 关闭流 excelWriter.finish(); ``` 在这个示例中,我们首先创建了一个 Sheet 对象,并指定了导出的数据类型为 ExportData.class。接着,我们通过写入表头和数据的方式来将数据输出到 Excel 表格中。在写入数据时,我们使用了一个 for 循环来遍历每个 ExportData 对象的 courses 列表,并依次输出到 Excel 表格中。 以上就是使用 EasyExcel 导出一对多数据的示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值