EasyExcel 实践案例:打印工资条

在实际开发中,我们经常需要使用 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} 直接填充,因为 dataMap<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 使用指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值