文章目录
在实际开发中,我们经常需要使用 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)
);
// 创建 ExcelWriter
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();
}
}
🔥 关键点
✔ 每个员工的数据单独放入不同的 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)
);
// 生成 Excel
EasyExcel.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 使用指南