当前位置: 首页 > news >正文

EasyExcel 复杂填充

EasyExcel

​Excel表格中用{}或者{.} 来表示包裹要填充的变量,如果单元格文本中本来就有{、}左右大括号,需要在括号前面使用斜杠转义\{ 、\}。

​代码中被填充数据的实体对象的成员变量名或被填充map集合的key需要和Excel中被{}包裹的变量名称一致。

ExcelWriter的fill()方法 用于填充数据
 
 FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();//表示开启组合填充换行填充

样例

在这里插入图片描述

测试代码

TeacherInfo 对象

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder //通过自动生成的构建器模式创建对象
public class TeacherInfo {
 	private int age;//年龄
    private String name;//姓名
    private String subject;//科目
}

StudentInfo对象

package com.fasterres.demo.blog;

import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class StudentInfo {
    private String id;//编号
    private String studentname;//姓名
    private String sex;//性别

    @DateTimeFormat("yyyy/MM/dd")
    private Date birthday;//生日
}


import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.fasterres.demo.blog.StudentInfo;
import com.fasterres.demo.blog.TeacherInfo;
import org.springframework.core.io.ClassPathResource;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

public class ExcelWriteTest {
    public static void main(String[] args) throws Exception {

        // 1.写入文件方式
        String filePath = "D:\\log\\stduent_01.xlsx";
        InputStream templateFile = new FileInputStream(filePath);
        String targetFile = "D:\\学生信息统计2.xlsx";
        ExcelWriter excelWriter =EasyExcel.write(targetFile).withTemplate(templateFile).build();

        // 2.加载模板,配置在项目工程下的 写入io
       /* ClassPathResource resource=new ClassPathResource("template/stduent_01.xlsx");

        InputStream templateInputStream = resource.getInputStream();*/
        //写入io流
        //ByteArrayOutputStream outputStream=new ByteArrayOutputStream(1024);

        // 写入excelWriter对象
        //ExcelWriter excelWriter= EasyExcel.write(outputStream).withTemplate(templateInputStream ).build();
        WriteSheet sheet = EasyExcel.writerSheet().build();


        // 当前日期
        HashMap<String, String> dateMap = new HashMap<String, String>();
        dateMap.put("date", "2025-02-06");
        //填充单个字段信息
        excelWriter.fill(dateMap,sheet);

        //填充单个对象信息
/*
        TeacherInfo teacher=TeacherInfo.builder()
                .age(33)
                .name("张竹")
                .build();
        excelWriter.fill(teacher,sheet);
*/

        //换行填充
        FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();
        //多次填充list,可以用new FillWrapper()申明别名
        //填充第一个list
        List<TeacherInfo> teacherInfoList=new ArrayList();
        TeacherInfo teacher2=TeacherInfo.builder()
                .age(22)
                .name("张竹")
                .subject("数学")
                .build();
        TeacherInfo teacher3=TeacherInfo.builder()
                .age(33)
                .name("power")
                .subject("英语")
                .build();
        teacherInfoList.add(teacher2);
        teacherInfoList.add(teacher3);
        excelWriter.fill(new FillWrapper("t1",teacherInfoList),fillConfig ,sheet);
        //填充第二个list对象


        List<StudentInfo> studentInfo = new ArrayList<>();
        StudentInfo Student1=new  StudentInfo("1", "张三", "男", DateUtil.parse("2022/12/12"));
        StudentInfo Student2=new  StudentInfo("2", "王芳", "女",  DateUtil.parse("2025/02/15"));
        studentInfo.add(Student1);
        studentInfo.add(Student2);
        excelWriter.fill(new FillWrapper("t2",studentInfo),fillConfig ,sheet);
        //结束填充
        excelWriter.finish();



    }
}





效果

在这里插入图片描述

总结

1.占位符
在根据模版导出数据时,要预先设置占位符。包括,单个数据占位符和列表数据占位符。

单个占位符:{字段名} 如:{name}

列表占位符:{.字段名} 如:{.age},如果一个表格中有多个数据列,占位符前要加前缀,如:{t1.id}、{t2.name}

2.如果需要配置多个list,可以用new FillWrapper 申请别名:
excelWriter.fill(new FillWrapper(“t1”,teacherInfoList),fillConfig ,sheet);

3.碰到输入的文件名和文件内容乱码:
引起原因是项目的编码或者文件的编码不是UTF-8,更改即可。

http://www.dtcms.com/a/20095.html

相关文章:

  • DeepSeek接入网络安全领域,AI高效驱动,重新定义网络防御边界!
  • UniApp 中制作一个横向滚动工具栏
  • MyBatis:动态SQL高级标签使用方法指南
  • 数据管理的四大基石:通俗解读数据中台、数据仓库、数据治理和主数据
  • 《千多桃花一世开》:南胥月为何爱暮悬铃
  • 输电杆塔沉降智能监测系统:如何用数据守护电网安全
  • ASP.NET Core SixLabors.ImageSharp v1.0 的图像实用程序类 web示例
  • uniapp可视化-活动报名表单系统-代码生成器
  • 【云安全】云原生- K8S kubeconfig 文件泄露
  • java中map实现函数式编程的原理
  • LVDS接口总结--(5)IDELAY3仿真
  • CEF132 编译指南 Linux 篇 - 开启 CEF 之旅:框架概览(一)
  • 微信小程序的请求函数封装(ts版本,uniapp开发)
  • 【电路笔记】-双向计数器
  • 【VUE】前端工程化与前端工程化与webpack
  • css简介
  • 哈希表(C语言版)
  • 【stm32】定时器输出PWM波形(hal库)
  • Qt的QPushButton样式设置
  • 半遮挡检测算法 Detecting Binocular Half-Occlusions
  • 19.4.2 -19.4.4 新增、修改、删除数据
  • SpringBoot服务器的采购上,服务器的数量和性能配置如何取舍【无标题】
  • Day2 25/2/15 SAT
  • electron打包基本教程
  • Flutter中 List列表中移除特定元素
  • QEMU 搭建arm linux开发环境
  • 纪念日倒数日项目的实现-【纪念时刻-时光集】
  • Debezium系列之:时区转换器,时间戳字段转换到指定时区
  • SpringCloud Alibaba
  • tensorflow环境中已安装库