EasyExcel 实践案例:打印工资条

文章目录

    • [🎯 1. 每个人一个 Excel 文件(单个对象填充)](#🎯 1. 每个人一个 Excel 文件(单个对象填充))
    • [🎯 2. 每个人一个 Sheet(批量生成工资单)](#🎯 2. 每个人一个 Sheet(批量生成工资单))
    • [🎯 3. 一张工资表,多个员工(列表数据填充)](#🎯 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 使用指南

相关推荐
晴空蓝天10 分钟前
MDC traceId 全链路日志追踪:Spring Boot 3.5 里把日志串成一条线
java·spring boot·后端·python
泡海椒16 分钟前
JQuick-Excel 项目定位与适用场景:声明式 Java Excel 的边界
java·开发语言·excel
AC赳赳老秦19 分钟前
财报附注表格精准提取:OpenClaw 从 PDF 年报附注挖掘隐藏明细,补齐财务分析维度
java·汇编·c++·python·青少年编程·deepseek·openclaw
箓维25 分钟前
线程的优缺点,与进程的关联和差异
java·服务器·笔记
曹牧27 分钟前
Spring MVC:@RequestMapping
java·spring·mvc
曹牧1 小时前
Spring MVC : Controller 层URL划分
java·运维·服务器·前端
卓怡学长1 小时前
w203基于springboot钢材仓库管理系统的设计与实现
java·spring boot·spring·intellij-idea
sunburn-1 小时前
Java 排序算法详细教学:从冒泡排序到快速排序
java·开发语言·数据结构·ide·算法
我是小白呀1 小时前
编排还是事件协作?用 AcmeFlow 讲清企业 Workflow 的控制权
java·开发语言
深入云栈1 小时前
Netty 4.2.x 源码深度解析 (十四):KQueue 传输 —— macOS 高性能 IO 的 Netty 实现
java·后端