当前位置: 首页 > news >正文

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} 直接填充,因为 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 使用指南

相关文章:

  • 一周学会Flask3 Python Web开发-Jinja2模板访问对象
  • w226经方药食两用服务平台的设计与实现
  • C++ 中的继承详解(上)
  • Spring DIIoC
  • JVM层面的JAVA类和实例(Klass-OOP)
  • 计算机毕业设计程序,定制开发服务
  • .manifest是什么文件格式
  • Docker 搭建 MySQL 数据库
  • 代码随想录算法训练营第四十八天| 动态规划10
  • c#丰田PLC ToyoPuc TCP协议快速读写 to c# Toyota PLC ToyoPuc读写
  • 在大数据项目中如何设计和优化数据模型
  • 力扣-贪心-56 合并区间
  • UIAutomation开发常用方法的参考文档
  • blender bpy渲染禁用日志
  • 尚硅谷爬虫note12
  • 【Electron入门】进程环境和隔离
  • MySQL数据库连接池泄露导致MySQL Server超时关闭连接
  • ESP32学习笔记_Bluetooth(2)——Bluetooth Stack、GAP
  • Node.js 入门 原型链污染
  • Fisher信息矩阵(Fisher Information Matrix, FIM)与自然梯度下降:机器学习中的优化利器
  • 企业英文网站制作/网络营销专业可以干什么工作
  • 京东网站的公司地址/六安seo
  • 手机网络营销策划书/沈阳seo收费
  • 郑州网站建设 天强科技/免费网站搭建
  • 网件路由器做网站/手机百度搜索app
  • 电子商务网站建设首要问题是/百度地图疫情实时动态