当前位置: 首页 > 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));// 创建 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 使用指南


http://www.mrgr.cn/news/92270.html

相关文章:

  • 基于SpringBoot的“流浪动物救助系统”的设计与实现(源码+数据库+文档+PPT)
  • TLS与自签名证书的创建、作用、用到的工具等知识的介绍
  • Remainder Problem CF1207F
  • Python Django系列—入门实例
  • 垃圾回收算法
  • 【前端】Axios AJAX Fetch
  • 【NLP 23、预训练语言模型】
  • git 命令 设置别名
  • 代码随想录算法训练营第九天| 151.翻转字符串里的单词、右旋转字符串 、28. 实现 strStr()、459.重复的子字符串、字符串总结
  • ONNX转RKNN的环境搭建和部署流程
  • eclogy后台运维笔记(写的很乱,只限个人观看)
  • 大连本地知识库的搭建--数据收集与预处理_01
  • 图论入门算法:拓扑排序(C++)
  • 安全见闻4
  • 【Docker】如何在Linux、Windows、MacOS中安装Docker
  • 登录功能的实现
  • Redis基操
  • 项目一 - 任务3:搭建Java集成开发环境IntelliJ IDEA
  • cpp中的继承
  • 如何手动设置u-boot的以太网的IP地址、子网掩码、网关信息、TFTP的服务器地址,并进行测试