EasyExcel 实践案例:打印工资条

news/2025/2/25 10:40:27

文章目录

    • 🎯 1. 每个人一个 Excel 文件(单个对象填充)
    • 🎯 2. 每个人一个 Sheet(批量生成工资单)
    • 🎯 3. 一张工资表,多个员工(列表数据填充)
    • 📌 总结
      • ✅ 最佳实践

打印工资条时,每个人的工资条是 一个独立的 Sheet一个独立的 Excel 文件,具体占位符用法取决于你如何填充数据:


🎯 1. 每个人一个 Excel 文件(单个对象填充)

适用于:给每个员工生成 单独的 Excel 文件,比如 工资单.pdf、工资单.xlsx 等。

占位符格式{字段名}(不用加 .

📌 Excel 模板

员工姓名工资奖金
{name}{salary}{bonus}

📌 Java 代码

java">List<Employee> employees = List.of(
    new Employee("张三", 10000, 2000),
    new Employee("李四", 12000, 2500)
);

for (Employee emp : employees) {
    String fileName = emp.getName() + "_工资单.xlsx";
    
    Map<String, Object> data = new HashMap<>();
    data.put("name", emp.getName());
    data.put("salary", emp.getSalary());
    data.put("bonus", emp.getBonus());

    ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate("salary_template.xlsx").build();
    WriteSheet writeSheet = EasyExcel.writerSheet().build();
    excelWriter.fill(data, writeSheet);
    excelWriter.finish();
}

这里用 {name},因为 data.put("name", "张三") 是一个 Map


🎯 2. 每个人一个 Sheet(批量生成工资单)

适用于:一个 Excel 文件,每个员工一个 Sheet,比如 “2024年1月工资.xlsx”。

占位符格式{字段名}(不用加 .

📌 Java 代码

java">String fileName = "2024年1月工资.xlsx";
List<Employee> employees = List.of(
    new Employee("张三", 10000, 2000),
    new Employee("李四", 12000, 2500)
);

ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate("salary_template.xlsx").build();

for (Employee emp : employees) {
    Map<String, Object> data = new HashMap<>();
    data.put("name", emp.getName());
    data.put("salary", emp.getSalary());
    data.put("bonus", emp.getBonus());

    WriteSheet writeSheet = EasyExcel.writerSheet(emp.getName() + "的工资单").build();
    excelWriter.fill(data, writeSheet);
}

excelWriter.finish();

这里 writeSheet() 指定了不同的 Sheet 名,每个人都有一个单独的工资单。


🎯 3. 一张工资表,多个员工(列表数据填充)

适用于:在 同一个 Sheet 里显示多个员工工资信息(类似公司 HR 用的总表)。

占位符格式{.字段}(加 .

📌 Excel 模板

姓名工资奖金
{.name}{.salary}{.bonus}

📌 Java 代码

java">String fileName = "工资表.xlsx";
List<Employee> employees = List.of(
    new Employee("张三", 10000, 2000),
    new Employee("李四", 12000, 2500)
);

ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate("salary_template.xlsx").build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
excelWriter.fill(employees, writeSheet);
excelWriter.finish();

这里用 {.name},因为 fill() 传的是 List<Employee>,EasyExcel 需要用 . 来解析列表数据。


📌 总结

场景占位符格式填充方式
每个人一个 Excel 文件{字段}(无 .fill(Map)
每个人一个 Sheet{字段}(无 .fill(Map)
一个 Sheet,多个员工{.字段}(有 .fill(List<T>)

✅ 最佳实践

  • 单个对象填充(一个人一张工资单) 👉 用 {字段}(无 .
  • 列表数据填充(工资表) 👉 用 {.字段}(有 .

这样,你就能正确地生成工资单啦!🚀

知识不扎实的可以回顾一下哦:EasyExcel 使用指南


http://www.niftyadmin.cn/n/5865396.html

相关文章

Winform工具箱、属性、事件

工具箱 Button------按钮&#xff1a;用户可以点击的按钮控件。 CheckBox------复选框&#xff1a;允许用户选择或取消选择选项的复选框。 CheckedListBox&#xff1a;结合了ListBox和CheckBox的功能&#xff0c;允许多项选择。 ColorDialog------颜色选择对话框&#xff1a;用…

九、k8s:ingress

k8s对外服务之ingress&#xff1a; service的作用&#xff1a; NodePort&#xff1a;会在每个节点开放一个端口&#xff0c;端口号30000-32767。 也是只能用于内网访问&#xff0c;四层转发。实现负载均衡。不能基于域名进行访问。 clusterip:service的默认类型&#xff0c…

Apache Doris:一款高性能的实时数据仓库

Apache Doris 是一款基于 MPP 架构的高性能、实时分析型数据库。它以高效、简单和统一的特性著称&#xff0c;能够在亚秒级的时间内返回海量数据的查询结果。Doris 既能支持高并发的点查询场景&#xff0c;也能支持高吞吐的复杂分析场景。 Apache Doris 最初是百度广告报表业务…

数字IC后端设计实现OCC(On-chip Clock Controller)电路介绍及时钟树综合案例

数字IC后端时钟树综合专题&#xff08;OCC电路案例分享&#xff09; 复杂时钟设计时钟树综合(clock tree synthesis)常见20个典型案例 1、什么是OCC&#xff1f; 片上时钟控制器(On-chip Clock Controllers &#xff0c;OCC)&#xff0c;也称为扫描时钟控制器(Scan Clock Con…

我与Linux的爱恋:了解信号量+共享内存+消息队列的应用

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;Linux的学习 文章目录 信号量共享内存应用---Server&Client通信client.ccserver.ccnamepipe.hppShm.hpp 消息队列——实现Client&ServerCom.hppClient.ccServer.cc 信号量 信号量…

用Deepseek直接在word中完成论文的润色(中-中,中-英, 英-中)

最近&#xff0c;各行各业仿佛掀起了一场“Deepseek接入大赛”——从大公司到小微企业&#xff0c;从手机助手到扫地机器人&#xff0c;似乎不接入Deepseek都不好意思说自己是“智能体”了。就连我家楼下的自动售货机都开始“思考”该给我推荐什么零食了&#xff08;虽然它最后…

MybatisPlus-扩展功能-枚举处理器

在Mybatis里有一个叫TypeHandler的类型处理器&#xff0c;我们常见的PO当中的这些成员变量的数据类型&#xff0c;它都有对应的处理器&#xff0c;因此它就能自动实现这些Java数据类型与数据库类型的相互转换。 它里面还有一个叫EnumOrdinalTypeHandler的枚举处理器&#xff0…

项目——仿RabbitMQ实现消息队列

1.项目介绍 曾经在学习Linux的过程中&#xff0c;我们学习过阻塞队列 (BlockingQueue) 。 当时我们说阻塞队列最大的用途, 就是用来实现生产者消费者模型。 生产者消费者模型是后端开发的常用编程方式&#xff0c; 它存在诸多好处&#xff1a; 解耦合支持并发支持忙闲不均削峰…