文章目錄
- 💡 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 使用指南