文章目录
- ???? 1. 每个人一个 Excel 文件(单个对象填充)
- ???? 2. 每个人一个 Sheet(批量生成工资单)
- ???? 3. 一张工资表,多个员工(列表数据填充)
- ???? 总结
- ✅ 最佳实践
打印工资条时,每个人的工资条是 一个独立的 Sheet 或 一个独立的 Excel 文件,具体占位符用法取决于你如何填充数据:
???? 1. 每个人一个 Excel 文件(单个对象填充)
适用于:给每个员工生成 单独的 Excel 文件,比如 工资单.pdf、工资单.xlsx 等。
✅ 占位符格式:{字段名}
(不用加 .
)
???? Excel 模板
员工姓名 | 工资 | 奖金 |
---|---|---|
{name} |
{salary} |
{bonus} |
???? 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 代码
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 代码
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 使用指南