Easy Excel——填充Excel

Easy Excel 填充

1、简单填充

模板:
在这里插入图片描述

1.1、方式一:根据对象填充

@Data
public class FillData {
    private String name;
    private double number;
    private Date date;
}
/**
 * 方式一:根据对象填充
 */
@Test
public void simpleFill1() {
    // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
    String templateName = "./src/main/resources/fill.xlsx";
    String fileName = "./src/main/resources/success.xlsx";
    // 这里 会填充到第一个sheet, 然后文件流会自动关闭
    FillData fillData = new FillData();
    fillData.setName("张三");
    fillData.setNumber(5.2);
    fillData.setDate(new Date());
    EasyExcel.write(fileName).withTemplate(templateName).sheet().doFill(fillData);
}

在这里插入图片描述

1.2、方式二:根据Map填充

/**
 * 方式二:根据Map填充
 */
@Test
public void simpleFill2() {
    // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
    String templateName = "./src/main/resources/fill.xlsx";
    String fileName = "./src/main/resources/success.xlsx";
    Map<String, Object> map = MapUtils.newHashMap();
    map.put("name", "张三");
    map.put("number", 5.2);
    EasyExcel.write(fileName).withTemplate(templateName).sheet().doFill(map);
}

在这里插入图片描述

2、填充列表

模板:
在这里插入图片描述

2.1、方式一:全部放入内存,一次性填充

/**
 * 方式一:全部放入内存,一次性填充
 */
@Test
public void listFill1() {
    // 填充list 的时候还要注意 模板中{.} 多了个点 表示list
    // 如果填充list的对象是map,必须包涵所有list的key,哪怕数据为null,必须使用map.put(key,null)
    String templateName = "./src/main/resources/list.xlsx";
    String fileName = "./src/main/resources/success.xlsx";
    // 这里 会填充到第一个sheet, 然后文件流会自动关闭
    EasyExcel.write(fileName).withTemplate(templateName).sheet().doFill(data());
}


/**
 * 生成数据
 * @return
 */
private List<FillData> data() {
    List<FillData> list = ListUtils.newArrayList();
    for (int i = 0; i < 10; i++) {
        FillData data = new FillData();
        data.setName("A" + i);
        data.setNumber(2.202 * i);
        data.setDate(new Date());
        list.add(data);
    }
    return list;
}

在这里插入图片描述

2.2、方式二:分多次填充 会使用文件缓存(省内存)

/**
 * 方式二:分多次填充 会使用文件缓存(省内存)
 */
@Test
public void listFill2() {
    // 填充list 的时候还要注意 模板中{.} 多了个点 表示list
    // 如果填充list的对象是map,必须包涵所有list的key,哪怕数据为null,必须使用map.put(key,null)
    String templateName = "./src/main/resources/list.xlsx";
    String fileName = "./src/main/resources/success.xlsx";
    try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateName).build()) {
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        excelWriter.fill(data(), writeSheet);
        excelWriter.fill(data(), writeSheet);
    }
}

在这里插入图片描述

3、复杂填充

模板:
在这里插入图片描述

@Test
public void complexFill() {
    String templateName = "./src/main/resources/fuza.xlsx";
    String fileName = "./src/main/resources/success.xlsx";
    try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateName).build()) {
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,
        // 然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
        // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
        // 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
        // 如果数据量大 list不是最后一行 参照下一个
        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
        excelWriter.fill(data(), fillConfig, writeSheet);
        excelWriter.fill(data(), fillConfig, writeSheet);
        Map<String, Object> map = MapUtils.newHashMap();
        map.put("date", "2019年10月9日13:28:28");
        map.put("total", 1000);
        excelWriter.fill(map, writeSheet);
    }
}

在这里插入图片描述

4、数据量大的复杂填充

模板:
在这里插入图片描述

@Test
public void complexFillWithTable() {
    String templateName = "./src/main/resources/fuza.xlsx";
    String fileName = "./src/main/resources/success.xlsx";
    try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateName).build()) {
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        // 直接写入数据
        excelWriter.fill(data(), writeSheet);
        excelWriter.fill(data(), writeSheet);

        // 写入list之前的数据
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("date", "2019年10月9日13:28:28");
        excelWriter.fill(map, writeSheet);

        // list 后面还有个统计 想办法手动写入
        // 这里偷懒直接用list 也可以用对象
        List<List<String>> totalListList = ListUtils.newArrayList();
        List<String> totalList = ListUtils.newArrayList();
        totalListList.add(totalList);
        totalList.add(null);
        totalList.add(null);
        totalList.add(null);
        // 第四列
        totalList.add("统计:1000");
        // 这里是write 别和fill 搞错了
        excelWriter.write(totalListList, writeSheet);
        // 总体上写法比较复杂 但是也没有想到好的版本 异步的去写入excel 不支持行的删除和移动,也不支持备注这种的写入,所以也排除了可以
        // 新建一个 然后一点点复制过来的方案,最后导致list需要新增行的时候,后面的列的数据没法后移,后续会继续想想解决方案
    }
}

5、横向的填充

模板:

在这里插入图片描述

@Test
public void horizontalFill() {
    String templateName = "./src/main/resources/hengxiang.xlsx";
    String fileName = "./src/main/resources/success.xlsx";
    try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateName).build()) {
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
        excelWriter.fill(data(), fillConfig, writeSheet);
        excelWriter.fill(data(), fillConfig, writeSheet);

        Map<String, Object> map = new HashMap<>();
        map.put("date", "2019年10月9日13:28:28");
        excelWriter.fill(map, writeSheet);
    }
}

在这里插入图片描述

6、多列表组合填充

模板:
在这里插入图片描述

@Test
public void compositeFill() {
    String templateName = "./src/main/resources/multi.xlsx";
    String fileName = "./src/main/resources/success.xlsx";
    try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateName).build()) {
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
        // 如果有多个list 模板上必须有{前缀.} 这里的前缀就是 data1,然后多个list必须用 FillWrapper包裹
        excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet);
        excelWriter.fill(new FillWrapper("data2", data()), writeSheet);
        excelWriter.fill(new FillWrapper("data3", data()), writeSheet);

        Map<String, Object> map = new HashMap<String, Object>();
        //map.put("date", "2019年10月9日13:28:28");
        map.put("date", new Date());
        excelWriter.fill(map, writeSheet);
    }
}

在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值