【EasyExcel 教程】详解填充Excel -- 填充

 
愿你如阳光,明媚不忧伤。

 


5. 详解填充Excel

5.1 简单填充Excel

  • EasyExcelTemplateFile.xlsx
    先在excel模板文件中设定好模板样式。注意:{}前面加上转义符\会忽略该属性。

    在这里插入图片描述

  • EasyExcelData.java
    创建与Excel模板相对应的实体类。

public class EasyExcelFillData {
    private String name;
    private Double age;
    // 省略get和set
}
  • EasyExcelDataController.java
    填充Excel,这里提供两种方式填充
@RestController
@RequestMapping("/easyExcel")
public class EasyExcelDataController extends BaseController {
    @Resource
    EasyExcelDataListener easyExcelDataListener;
    // 指定需要读的excel文件
    String fileName = "C:/Users/ISCCF_A/Desktop/EasyExcelData.xlsx";

	// 省略读取和写入部分

    @RequestMapping("/fill")
    public JsonResult<? extends Object> simpleFill(int mode) {
        log.info(startLog(Thread.currentThread().getStackTrace()[1].getMethodName()));
        // Excel模板文件
        String templateFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelTemplateFile.xlsx";
        // 要填充的文件
        String fillAimFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelFillAimFile.xlsx";
        if (mode == 1) {
            // 方案1 根据对象填充
            // 这里会填充到第一个sheet,然后文件流会自动关闭
            EasyExcelFillData fillData = new EasyExcelFillData();
            fillData.setName("张三");
            fillData.setAge(24.2);
            EasyExcel.write(fillAimFileName).withTemplate(templateFileName).sheet().doFill(fillData);
            log.info(endLog(Thread.currentThread().getStackTrace()[1].getMethodName()));
            return new JsonResult<EasyExcelFillData>(fillData, "Excel填充数据成功!");
        } else {
            // 方案2 根据Map填充
            // 这里会填充到第一个sheet,然后文件流会自动关闭
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("name", "李四");
            map.put("age", 26.5);
            EasyExcel.write(fillAimFileName).withTemplate(templateFileName).sheet().doFill(map);
            log.info(endLog(Thread.currentThread().getStackTrace()[1].getMethodName()));
            return new JsonResult<Map<String, Object>>(map, "Excel填充数据成功!");
        }
    }
}

浏览器访问 http://localhost:8080/easyExcel/fill?mode=1

在这里插入图片描述

  • EasyExcelFillAimFile.xlsx

在这里插入图片描述

5.2 填充列表

  • EasyExcelTemplateFile.xlsx
    先在excel模板文件中设定好模板样式。注意:{}前面加上转义符\会忽略该属性。 模板中{.} 多了个点,表示list。

在这里插入图片描述

  • EasyExcelUtil.java
    创建填充数据
public class EasyExcelUtil {
    public static List<EasyExcelFillData> testFillData() {
        List<EasyExcelFillData> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            EasyExcelFillData data = new EasyExcelFillData();
            data.setName("OUSEKI" + i);
            data.setAge(18 + i * Math.random());
            list.add(data);
        }
        return list;
    }
}
  • EasyExcelDataFillController.java
@RestController
@RequestMapping("/easyExcelFill")
public class EasyExcelDataFillController extends BaseController {
    // Excel模板文件
    String templateFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelTemplateFile.xlsx";
    // 要填充的文件
    String fillAimFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelFillAimFile.xlsx";
    // 写入Excel的数据
    List<EasyExcelFillData> list = EasyExcelUtil.testFillData();
    
    @RequestMapping("/listFill")
    public void listFill(int mode) {
        log.info(startLog(Thread.currentThread().getStackTrace()[1].getMethodName()));
        if (mode == 1) {
            // 方案1:一下子全部放到内存里面并填充
            // 这里会填充到第一个sheet, 然后文件流会自动关闭
            EasyExcel.write(fillAimFileName).withTemplate(templateFileName).sheet().doFill(list);
        } else {
            // 方案2:分多次填充,会使用文件缓存(省内存)
            ExcelWriter excelWriter = EasyExcel.write(fillAimFileName).withTemplate(templateFileName).build();
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            excelWriter.fill(list, writeSheet);
            // 可以填充另一个文件中的内容,我这里没做额外数据
            excelWriter.fill(list, writeSheet);
            // 千万别忘记关闭流
            excelWriter.finish();
        }
        log.info(endLog(Thread.currentThread().getStackTrace()[1].getMethodName()));
    }
}

浏览器访问 http://localhost:8080/easyExcelFill/listFill?mode=10

在这里插入图片描述

5.3 复杂的填充

  • EasyExcelTemplateFile.xlsx
    先在excel模板文件中设定好模板样式。注意:{}前面加上转义符\会忽略该属性。 模板中{.} 多了个点,表示list。

在这里插入图片描述

  • EasyExcelDataFillController.java
@RestController
@RequestMapping("/easyExcelFill")
public class EasyExcelDataFillController extends BaseController {
    // Excel模板文件
    String templateFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelTemplateFile.xlsx";
    // 要填充的文件
    String fillAimFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelFillAimFile.xlsx";
    // 写入Excel的数据
    List<EasyExcelFillData> list = EasyExcelUtil.testFillData();
    
    @RequestMapping("/complexFill")
    public void complexFill() {
        log.info(startLog(Thread.currentThread().getStackTrace()[1].getMethodName()));
        ExcelWriter excelWriter = EasyExcel.write(fillAimFileName).withTemplate(templateFileName).build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        // 这里注意,入参用了forceNewRow,代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
        // forceNewRow如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用!
        // 简单的说,如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存,会很耗内存。
        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
        excelWriter.fill(list, fillConfig, writeSheet);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("date", new Date());
        map.put("total", 1000);
        excelWriter.fill(map, writeSheet);
        excelWriter.finish();
        log.info(endLog(Thread.currentThread().getStackTrace()[1].getMethodName()));
    }
}

浏览器访问 http://localhost:8080/easyExcelFill/complexFill

在这里插入图片描述

5.4 横向的填充

  • EasyExcelTemplateFile.xlsx
    先在excel模板文件中设定好模板样式。注意:{}前面加上转义符\会忽略该属性。 模板中{.} 多了个点,表示list。

在这里插入图片描述

  • EasyExcelDataFillController.java
@RestController
@RequestMapping("/easyExcelFill")
public class EasyExcelDataFillController extends BaseController {
    // Excel模板文件
    String templateFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelTemplateFile.xlsx";
    // 要填充的文件
    String fillAimFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelFillAimFile.xlsx";
    // 写入Excel的数据
    List<EasyExcelFillData> list = EasyExcelUtil.testFillData();
    
    @RequestMapping("/horizontalFill")
    public void horizontalFill() {
        log.info(startLog(Thread.currentThread().getStackTrace()[1].getMethodName()));
        ExcelWriter excelWriter = EasyExcel.write(fillAimFileName).withTemplate(templateFileName).build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
        excelWriter.fill(list, fillConfig, writeSheet);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("date", new Date());
        excelWriter.fill(map, writeSheet);
        // 别忘记关闭流
        excelWriter.finish();
        log.info(endLog(Thread.currentThread().getStackTrace()[1].getMethodName()));
    }
}

浏览器访问 http://localhost:8080/easyExcelFill/horizontalFill

在这里插入图片描述

5.5 多列表组合填充

  • EasyExcelTemplateFile.xlsx
    先在excel模板文件中设定好模板样式。注意:{}前面加上转义符\会忽略该属性。 模板中{.} 多了个点,表示list。

在这里插入图片描述

  • EasyExcelDataFillController.java
@RestController
@RequestMapping("/easyExcelFill")
public class EasyExcelDataFillController extends BaseController {
    // Excel模板文件
    String templateFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelTemplateFile.xlsx";
    // 要填充的文件
    String fillAimFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelFillAimFile.xlsx";
    // 写入Excel的数据
    List<EasyExcelFillData> list = EasyExcelUtil.testFillData();
    
    @RequestMapping("/compositeFill")
    public void compositeFill() {
        log.info(startLog(Thread.currentThread().getStackTrace()[1].getMethodName()));
        ExcelWriter excelWriter = EasyExcel.write(fillAimFileName).withTemplate(templateFileName).build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
        // 如果有多个list,模板上必须有{前缀.} 这里的前缀就是data1,然后多个list必须用FillWrapper包裹
        excelWriter.fill(new FillWrapper("data1", list), fillConfig, writeSheet);
        excelWriter.fill(new FillWrapper("data2", list), writeSheet);
        excelWriter.fill(new FillWrapper("data3", list), writeSheet);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("date", new Date());
        excelWriter.fill(map, writeSheet);
        // 别忘记关闭流
        excelWriter.finish();
        log.info(endLog(Thread.currentThread().getStackTrace()[1].getMethodName()));
    }
}

浏览器访问 http://localhost:8080/easyExcelFill/compositeFill

在这里插入图片描述

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值