EasyExcel 实践案例:打印工资条
文章目录
- 💡 1. 每个员工一个 Excel 文件
- ✅ 占位符格式
- 📌 Excel 模板
- 📌 Java 代码
- 🔥 关键点
- 💡 2. 每个员工一个 Sheet
- ✅ 占位符格式
- 📌 Java 代码
- 🔥 关键点
- 💡 3. 一个 Sheet,多个员工
- ✅ 占位符格式
- 📌 Excel 模板
- 📌 Java 代码
- 🔥 关键点
- 📌 总结
- 🚀 最佳实践
在实际开发中,我们经常需要使用 Excel 生成工资条,EasyExcel 提供了 模板填充 功能,使得批量生成工资单变得非常高效。本篇文章将详细讲解 三种常见工资单生成方式,并分析 占位符的正确使用方法。
💡 1. 每个员工一个 Excel 文件
适用场景:每个员工的工资单是 独立的 Excel 文件,适用于企业给员工发送工资单的情况。
✅ 占位符格式
- 使用
{字段名}
(不带.
) - 每个员工的数据 存储在
Map<String, Object>
中
📌 Excel 模板
员工姓名 | 工资 | 奖金 |
---|---|---|
{name} | {salary} | {bonus} |
📌 Java 代码
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.WriteSheet;
import java.util.*;public class SalarySheetGenerator {public static void main(String[] args) {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());// 使用 EasyExcel 生成工资单EasyExcel.write(fileName).withTemplate("salary_template.xlsx").sheet().doFill(data);}}
}
🔥 关键点
✔ 占位符 {name}
、{salary}
、{bonus}
直接填充,因为 data
是 Map<String, Object>
✔ 每个员工单独生成一个 Excel 文件
💡 2. 每个员工一个 Sheet
适用场景:一个 Excel 文件中,每个员工 单独一个 Sheet,适用于 HR 统一管理工资单。
✅ 占位符格式
- 使用
{字段名}
(不带.
) - 每个员工的数据 存储在
Map<String, Object>
中
📌 Java 代码
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.WriteSheet;
import java.util.*;public class SalarySheetGenerator {public static void main(String[] args) {String fileName = "2024年1月工资.xlsx";List<Employee> employees = List.of(new Employee("张三", 10000, 2000),new Employee("李四", 12000, 2500));// 创建 ExcelWriterExcelWriter 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();}
}
🔥 关键点
✔ 每个员工的数据单独放入不同的 Sheet
✔ writeSheet(emp.getName() + "的工资单")
指定 Sheet 名称
✔ 数据填充方式与单个 Excel 文件相同,仍然使用 {字段}
💡 3. 一个 Sheet,多个员工
适用场景:所有员工的工资条放在同一个 Sheet,适用于企业 HR 统计所有员工工资情况。
✅ 占位符格式
- 使用
{.字段}
(带.
) - 直接填充
List<Employee>
📌 Excel 模板
姓名 | 工资 | 奖金 |
---|---|---|
{.name} | {.salary} | {.bonus} |
📌 Java 代码
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.WriteSheet;
import java.util.*;public class SalarySheetGenerator {public static void main(String[] args) {String fileName = "工资表.xlsx";List<Employee> employees = List.of(new Employee("张三", 10000, 2000),new Employee("李四", 12000, 2500));// 生成 ExcelEasyExcel.write(fileName).withTemplate("salary_template.xlsx").sheet().doFill(employees);}
}
🔥 关键点
✔ 列表填充时,EasyExcel 需要使用 {.字段}
格式
✔ fill(List<Employee>)
让 EasyExcel 自动匹配字段
✔ 所有员工工资信息都放在同一个 Sheet
📌 总结
场景 | 占位符格式 | 填充方式 |
---|---|---|
每个人一个 Excel 文件 | {字段} (无 . ) | fill(Map) |
每个人一个 Sheet | {字段} (无 . ) | fill(Map) |
一个 Sheet,多个员工 | {.字段} (有 . ) | fill(List<T>) |
🚀 最佳实践
✅ 单个对象填充(一个人一张工资单) 👉 用 {字段}
(无 .
)
✅ 列表数据填充(工资表) 👉 用 {.字段}
(有 .
)
🔗 推荐阅读:EasyExcel 使用指南