主页 > 电脑硬件  > 

EasyExcel复杂填充

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,更改即可。

标签:

EasyExcel复杂填充由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“EasyExcel复杂填充