当前位置: 首页 > 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()申明别名//填充第一个listList<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 ​Excel表格中用{}或者{.} 来表示包裹要填充的变量&#xff0c;如果单元格文本中本来就有{、}左右大括号&#xff0c;需要在括号前面使用斜杠转义\{ 、\}。 ​代码中被填充数据的实体对象的成员变量名或被填充map集合的key需要和Excel中被{}包裹的变量名称一致。 …...

ESP32通过MQTT连接阿里云平台实现消息发布与订阅

文章目录 前言 一、准备工作 二、阿里云平台配置 三、代码实现 总结 前言 本文将介绍如何使用ESP32开发板通过MQTT协议连接阿里云物联网平台&#xff0c;并实现消息的发布与订阅功能。我们将使用Arduino IDE进行开发&#xff0c;并借助PubSubClient库实现MQTT通信。 一、准备…...

NVIDIA Jetson Orin Nano 刷机过程

1. 背景 新到手 NVIDIA Jetson Orin Nano 插上显示屏&#xff0c;显示如下&#xff1a; 这是UEFI Shell&#xff0c;UEFI Shell&#xff08;统一可扩展固件接口外壳程序&#xff09;是一种基于UEFI规范的交互式命令行工具&#xff0c;它运行在UEFI固件环境中&#xff0c;为用…...

C#学习之数据转换

目录 一、创作说明 二、数据类型之间的转换 1.数据类型之间的转换表格 2.代码示例 三、进制之间的转换 1.进制之间的转换表格 2.代码示例 四、ASCII 编码和字符之间的转换 1.ASCII 编码和字符之间的转换表格 2.代码示例 五、总结 一、创作说明 C#大多数时候都是和各…...

typecho快速发布文章

typecho_Pytools typecho_Pytools工具由python编写&#xff0c;可以快速批量的在本地发布文章&#xff0c;不需要登陆后台粘贴md文件内容&#xff0c;同时此工具还能查看最新的评论消息。… 开源地址: GitHub Gitee 使用教学&#xff1a;B站 一、主要功能 所有操作不用登陆博…...

深度学习R4周:LSTM-火灾温度预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 任务&#xff1a; 数据集中提供了火灾温度&#xff08;Tem1&#xff09;、一氧化碳浓度&#xff08;CO 1&#xff09;烟雾浓度&#xff08;Soot 1&#xff09;…...

探索Java中的集合类_特性与使用场景

1. 引言 1.1 Java集合框架概述 Java集合框架(Java Collections Framework, JCF)是Java中用于存储和操作一组对象的类和接口的统称。它提供了多种数据结构来满足不同的需求,如列表、集合、映射等。JCF的核心接口包括Collection、List、Set、Queue和Map,以及它们的各种实现…...

自动化遇到的问题记录(遇到问题就更)

总结回归下自己这边遇到的一些问题 “EOF错误”&#xff0c;获取不到csv里面的内容 跑多csv文件里的场景&#xff0c;部分场景的请求值为 1、检查csv文件里不能直接是[]开头的参数&#xff0c;把[]改到ms平台的请求参数里 2、有时可能是某个参数值缺了双引号的其中一边 met…...

【云安全】云原生- K8S kubeconfig 文件泄露

什么是 kubeconfig 文件&#xff1f; kubeconfig 文件是 Kubernetes 的配置文件&#xff0c;用于存储集群的访问凭证、API Server 的地址和认证信息&#xff0c;允许用户和 kubectl 等工具与 Kubernetes 集群进行交互。它通常包含多个集群的配置&#xff0c;支持通过上下文&am…...

【愚公系列】《Python网络爬虫从入门到精通》008-正则表达式基础

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

【Linux】Ext2文件系统、软硬链接

Ext2文件系统 一.理解硬件1.磁盘、服务器、机柜、机房2.磁盘的物理结构3.磁盘的存储结构4.磁盘的逻辑结构1.理解过程2.真实过程 5.CHS地址、LBA地址转换 二.引入文件系统1.引入"块"概念2.引入"分区"概念3.引入"inode"概念 三.Ext2文件系统1.宏观…...

ATF系统安全从入门到精通

CSDN学院课程连接&#xff1a;https://edu.csdn.net/course/detail/39573...

【算法专场】哈希表

目录 前言 哈希表 1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; 算法分析 算法代码 面试题 01.02. 判定是否互为字符重排 ​编辑算法分析 算法代码 217. 存在重复元素 算法分析 算法代码 219. 存在重复元素 II 算法分析 算法代码 解法二 算法代码 算法…...

Beszel监控Docker安装

一、Beszel Hub安装 #Beszel Hub安装 mkdir -p ./beszel_data && \ docker run -d \--name beszel \--restartunless-stopped \-v ./beszel_data:/beszel_data \-p 8090:8090 \henrygd/beszel#创建账号 账号/密码&#xff1a;adminadmin.com/adminadmin.com 二、Besz…...

如何学习Elasticsearch(ES):从入门到精通的完整指南

如何学习Elasticsearch&#xff08;ES&#xff09;&#xff1a;从入门到精通的完整指南 嘿&#xff0c;小伙伴们&#xff01;如果你对大数据搜索和分析感兴趣&#xff0c;并且想要掌握Elasticsearch这一强大的分布式搜索引擎&#xff0c;那么你来对地方了&#xff01;本文将为…...

【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis

mybatis 的常用配置 配置数据库连接 #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasource.urljdbc:mysql://127.0.0.1:3306/mybatis_test characterEncodingutf8&useSSLfalse #连接数据库的名 spring.datasourc…...

CSV格式和普通EXCEL格式文件的区别

CSV 文件&#xff08;.csv&#xff09; 普通的 Excel 文件&#xff08;.xlsx 或 .xls) 主要体现在 文件格式、数据存储、功能支持 等方面: 文件格式 比较项CSV 文件 (.csv)Excel 文件 (.xlsx/.xls)文件类型纯文本文件二进制或 XML 格式数据分隔逗号&#xff08;,&#xff09…...

使用 Vite + React 19 集成 Tailwind CSS 与 shadcn/ui 组件库完整指南

使用 Vite React 19 集成 Tailwind CSS 与 shadcn/ui 组件库完整指南 &#x1f31f; 前言一、创建 React 19 项目二、集成 Tailwind CSS1️⃣ 安装依赖2️⃣ 配置 Vite 插件3️⃣ 引入 Tailwind4️⃣ 启动项目 三、配置路径别名1️⃣ 修改 TypeScript 配置2️⃣ 安装类型声明3…...

【java】基本数据类型和引用数据类型

在 Java 中&#xff0c;数据类型分为 基本数据类型 和 引用数据类型。它们的本质区别在于存储方式和操作方式。下面我会详细解释这两种数据类型&#xff0c;并用通俗易懂的语言帮助你理解。 1. 基本数据类型&#xff08;Primitive Data Types&#xff09; 基本数据类型是 Java…...

mybatis-lombok工具包介绍

Lombok是一个实用的]ava类库&#xff0c;能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法&#xff0c;并可以自动化生成日志变量&#xff0c;简化java开发、提高效率。 使用前要加入Lombok依赖...

别再到处找了!Windows 10/11 安装嘉立创EDA专业版2.1.33的保姆级图文教程

Windows 10/11 安装嘉立创EDA专业版2.1.33全流程避坑指南 作为一名电子设计爱好者&#xff0c;第一次接触电路设计软件时最头疼的往往不是功能使用&#xff0c;而是安装过程中的各种"坑"。嘉立创EDA作为国产EDA软件的佼佼者&#xff0c;其专业版2.1.33版本在功能和性…...

从深度图到3D点云:用奥比中光摄像头和OpenNI玩转Python三维视觉(实战项目)

从深度图到3D点云&#xff1a;用奥比中光摄像头和OpenNI玩转Python三维视觉 当RGBD摄像头捕捉到的深度数据在屏幕上跳动时&#xff0c;那些数字背后隐藏着一个完整的三维世界。想象一下&#xff0c;你不仅能"看到"物体的平面图像&#xff0c;还能精确感知每个像素点…...

LLMs-from-scratch-CN实战案例:构建垃圾邮件分类器与用户界面

LLMs-from-scratch-CN实战案例&#xff1a;构建垃圾邮件分类器与用户界面 【免费下载链接】LLMs-from-scratch-CN LLMs-from-scratch项目中文翻译 项目地址: https://gitcode.com/gh_mirrors/llm/LLMs-from-scratch-CN LLMs-from-scratch-CN是一个优秀的开源项目&#x…...

高级MoveIt编程技巧:自定义运动规划器和优化算法的实现方法

高级MoveIt编程技巧&#xff1a;自定义运动规划器和优化算法的实现方法 【免费下载链接】moveit :robot: The MoveIt motion planning framework 项目地址: https://gitcode.com/gh_mirrors/mo/moveit MoveIt是一个强大的机器人运动规划框架&#xff0c;为开发者提供了灵…...

ThinkPad风扇控制终极指南:用TPFanCtrl2实现智能散热与静音平衡

ThinkPad风扇控制终极指南&#xff1a;用TPFanCtrl2实现智能散热与静音平衡 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否厌倦了ThinkPad风扇在轻负载时的频繁…...

欧拉回路(一笔画)

欧拉回路是图论中的一个经典概念&#xff0c;指一条经过图中每条边恰好一次并且起点和终点相同的闭合路径。通俗地讲&#xff0c;就是一笔画问题中能够不重复地走完所有边并回到起点的画法。 基本定义 欧拉回路&#xff1a;经过图中每条边恰好一次且闭合的回路。 欧拉通路&am…...

本地大模型Web聊天界面部署指南:Ollama与llm-chat-web-ui整合实践

1. 项目概述&#xff1a;一个为本地大语言模型打造的聊天界面如果你和我一样&#xff0c;热衷于折腾各种开源大语言模型&#xff0c;从早期的LLaMA到现在的Qwen、DeepSeek&#xff0c;那你一定经历过这样的场景&#xff1a;好不容易在本地部署好了一个7B甚至70B参数的模型&…...

TypeScript异步迭代器资源释放终极指南:Dispose机制深度解析

TypeScript异步迭代器资源释放终极指南&#xff1a;Dispose机制深度解析 【免费下载链接】TypeScript TypeScript is a superset of JavaScript that compiles to clean JavaScript output. 项目地址: https://gitcode.com/GitHub_Trending/ty/TypeScript TypeScript作为…...

高性能WSL离线管理架构设计:LxRunOffline的Windows子系统全生命周期管理最佳实践

高性能WSL离线管理架构设计&#xff1a;LxRunOffline的Windows子系统全生命周期管理最佳实践 【免费下载链接】LxRunOffline A full-featured utility for managing Windows Subsystem for Linux (WSL) 项目地址: https://gitcode.com/gh_mirrors/lx/LxRunOffline 在Win…...

一名女性程序员迈向技术SEO的人生之书

这本书也就简简单单的看了3~5遍而已吧~ &#x1f604; 可以算是我人生谷底、重建信心、触底反弹的人生之书吧~ AEO&GEO当道&#xff0c;为什么要看SEO这本书&#xff1f; AEO 和 GEO的参考文档是 姚金刚的GEO白皮书 同时在youtube 上看 Nathan Gotch &#xff0c;他同时经…...