在人事与财务部门,工资条的发放是一项每月必做、却又格外琐碎的工作。工资表通常是一张按行排列的 Excel 表格——每一行对应一名员工,列则是基本工资、绩效奖金、加班费、社保扣除、公积金、个税和实发工资等项目。但发到员工手里时,每个人只应该看到属于自己的那一行。于是"一张表"必须先被"拆成 N 份",再逐份发送出去。
传统做法是在表格里逐行复制粘贴:新建一个文件、把表头粘一遍、再把某位员工的那一行粘进去、另存为 PDF,然后重命名、再循环下一位。几十人的团队就要重复几十遍,上百人时不仅耗时,还极易出现漏发、错发或把别人的薪酬发错对象的情况——而薪酬恰恰是最不能出错的信息。
Spire.Agent.Office 的 Excel AI 能力可以直接用自然语言描述拆分规则,AI 智能体理解后自动完成两类工作:把一张工资表拆成每人一份的独立工资条 PDF,以及让工资条套用统一的版式模板并按人加密,形成可以直接分发的文件,并顺带产出一份可随时查阅的分发台账。
对比传统 SDK API 处理
| 传统 Spire.Office for .NET API | Spire.Agent.Office 处理 | |
|---|---|---|
| 驱动方式 | 编写循环遍历数据行 + 新建工作簿 + 复制表头与数据 + 导出 PDF 的完整代码,控制每一步 | 用自然语言描述拆分与分发要求,AI 理解后自动编排执行路径 |
| 代码量 | 批量拆分与导出发送通常需要 200-400 行 C# 代码(含数据读取、行循环、工作表创建、样式复制、分页设置、PDF 导出、文件命名、加密参数等) | 约 10 行调用代码 + 1 条自然语言指令 |
| 版式处理 | 需手动复制表头样式、设置列宽与打印区域,否则每份工资条都会错版 | AI 自动识别并沿用原表头的边框、对齐与列宽 |
| 需求变更 | 改动拆分规则/命名方式/加密方式 → 改代码 → 编译 → 重新部署 | 修改指令,即刻生效 |
本文介绍如何使用 Spire.Agent.Office 将 Excel 工资表批量拆分为独立工资条 PDF。全文通过两个案例展示"直接拆分工资表"与"套用模板并加密分发"两种典型用法:
有关产品安装和 SpireToken 配置,请参考 在 .NET 项目中集成 Spire.Agent.Office。以下示例默认已安装 Spire.Agent.Office 并完成 SpireToken 配置。
案例一:工资表批量拆分为单人工资条 PDF
这是最直接的场景:手上只有一张原始工资表,没有额外的模板文件。表格首行是表头,其后每一行是一名员工的当月薪酬数据。需要做的是把这张表按行拆开,为每位员工生成一份只包含本人信息的工资条,并以"工号_姓名"命名保存,便于后续按人分发或归档。
手工完成这件事的痛点在于"重复":人数越多,复制粘贴的次数越多,越到后面越容易串行——把上一位的实发工资留在下一位的文件里,是很难被发现却后果严重的一类错误。
以下示例使用 Spire.Agent.Office 智能体,通过自然语言指令读取工资表中的全部员工数据,逐行拆分生成独立的工资条并导出为 PDF:
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Xls;
// Excel 处理相关配置
string inputPath = @"E:\payroll.xlsx"; // 待拆分的工资表文件路径
string savePath = null; // 结果文档路径(此处为null,将使用下面设置的输出文件夹路径)
string OutDir = @"E:\output"; // 输出目录(拆分后的工资条 PDF 将保存到此目录)
string key = "**************************"; // SpireToken Key
string instruction =
"读取工资表中的员工薪酬数据,为每位员工拆分生成一份独立的工资条:" +
"1. 首行为表头,其后每一行对应一名员工,逐行提取工号、姓名、部门与各薪酬项目;" +
"2. 每份工资条上方显示标题'工资条'与工资发放月份,并列明该员工的工号、姓名、部门,并按源表列顺序逐项列出基本工资、绩效奖金、加班费、社保扣除、公积金、个税与实发工资;" +
"3. 每位员工生成一份独立的 PDF 文件,以'工号_姓名'命名保存到输出目录;" +
"4. 保留原表头的边框与列宽设置,金额列右对齐并保留两位小数;" +
"5. 页面尺寸贴合工资条内容,边距紧凑、高度随内容自适应,不要留下大片空白;" +
"最终输出保存为PDF文件";
// 调用Excel文档处理函数
AIResult result = ExecuteDemoExcel(instruction, inputPath, savePath, key, OutDir);
// 执行Excel文档AI处理
static AIResult ExecuteDemoExcel(string instruction, string inputPath, string savePath, string key, string output)
{
// 创建AIOptions选项配置对象
AIOptions options = new AIOptions();
options.WorkDir = output; // 设置工作目录为输出目录
options.SpireToken = key; // 设置SpireToken Key
// 使用Workbook对象处理Excel文档
using (Workbook workbook = new Workbook())
{
// 从文件加载Excel工资表
if (!string.IsNullOrEmpty(inputPath) && File.Exists(inputPath))
{
workbook.LoadFromFile(inputPath);
}
// 创建AI文档处理器
AIDocumentProcessor processor = workbook.AI(options);
// 执行AI指令
return processor.ExecuteInstruction(workbook, instruction, savePath);
}
}
待拆分的 Excel 工资表
拆分生成的独立工资条 PDF

案例二:套用工资条模板并加密,生成可分发文件
企业发放工资条时,往往还要求两件事:统一版式和保密。企业通常有固定格式的工资条模板——带有公司抬头、发放月份、薪酬项目排列顺序和底部的说明文字;同时,薪酬属于敏感信息,直接以明文 PDF 发出,一旦转发或误投,员工的薪资就会外泄。
更稳妥的做法是:让每份工资条都套用同一个模板,再为每位员工的 PDF 单独设置一个打开密码(例如以其工号为基础生成),只有本人能打开查看自己的工资条。
但密码一旦"各不相同",就带来了新的管理问题:这些密码由谁记录、事后去哪里查。密码由"工号 + 随机四位数字"拼成,其中的随机数字无法从文件名或其他信息反推;几十上百份文件发出去之后,一旦员工反馈打不开,就只能回头翻原始工资表逐个试。因此加密分发的完整闭环里,还应当顺带产出一份分发台账——把文件名、员工信息与打开密码一一对应地记录下来,便于后续分发、核对与归档查询。
本案例以工资条模板作为输入文档,员工薪酬数据则作为附件传入;AI 需要把附件数据逐条填充到模板的对应位置,并在生成加密 PDF 的同时输出这份台账。
以下示例使用 Spire.Agent.Office 智能体,通过自然语言指令读取附件工资表中的员工数据,逐条填充到工资条模板中,为每位员工生成一份独立的 PDF,按"工号 + 随机四位数字"加密,并额外生成一份 Excel 格式的工资条分发台账文件:
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Xls;
// 员工薪酬数据文件路径(作为附件传入)
string[] attachmentPaths = new string[]
{
@"E:\payroll.xlsx"
};
// Excel 处理相关配置
string inputPath = @"E:\template-payslip.xlsx"; // 工资条模板文件路径
string savePath = null; // 结果文档路径(此处为null,将使用下面设置的输出文件夹路径)
string OutDir = @"E:\output-encrypted"; // 输出目录(加密后的工资条 PDF 与分发台账将保存到此目录)
string key = "**************************"; // SpireToken Key
string instruction =
"读取附件'payroll.xlsx'中的员工薪酬数据,按以下要求处理:" +
"1. 首行为表头,其后每一行对应一名员工,逐行读取工号、姓名、部门与各薪酬项目;" +
"2. 将每行数据逐条填充到工资条模板的对应位置,保持模板的公司抬头、说明文字与项目顺序不变;" +
"3. 每位员工生成一份独立的 PDF 文件,以'工号+员工姓名'命名保存到输出目录;" +
"4. 为该 PDF 设置打开密码,密码为'工号+随机的四位数字',仅限制文档打开,不影响打印与复制;" +
"5. 在输出目录另外生成一份 Excel 格式的工资条分发台账,逐行列出发放月份、工号、姓名、部门、工资条文件名与对应的打开密码,供后续分发与归档查询;" +
"6. 保留模板的布局样式、字体与列宽设置;" +
"最终输出保存为PDF文件";
// 调用Excel文档处理函数
AIResult result = ExecuteDemoExcel(instruction, inputPath, savePath, key, OutDir, attachmentPaths);
// 执行Excel文档AI处理
static AIResult ExecuteDemoExcel(string instruction, string inputPath, string savePath, string key, string output, string[] attachmentPaths)
{
// 创建AIOptions选项配置对象
AIOptions options = new AIOptions();
options.WorkDir = output; // 设置工作目录为输出目录
options.SpireToken = key; // 设置SpireToken Key
// 使用Workbook对象处理Excel文档
using (Workbook workbook = new Workbook())
{
// 从文件加载工资条模板
if (!string.IsNullOrEmpty(inputPath) && File.Exists(inputPath))
{
workbook.LoadFromFile(inputPath);
}
// 创建AI文档处理器
AIDocumentProcessor processor = workbook.AI(options);
// 执行AI指令
return processor.ExecuteInstruction(workbook, instruction, savePath, attachmentPaths);
}
}
工资模板文件
套用模板并加密后的工资条 PDF 与工资条分发台账

常见问题
拆分后的工资条出现串行或数据错位
原因:工资表中存在空行、合并单元格或小计行,导致 AI 按行读取时把非员工行也算作一条记录,后续记录整体错位。
解决:确保工资表首行为表头,其后每行对应且仅对应一名员工,中间不留空行与小计行;如果表格结构复杂,可在指令中写明判断规则,例如"仅在'工号'列非空时视为一名员工记录"。
加密后的工资条自己也无法打开
原因:每份工资条的密码按"工号 + 随机四位数字"生成,密码随人不同,其中的随机数字无法自行推算。
解决:在指令中明确密码规则(例如"密码为工号 + 随机的四位数字"),并务必将生成的密码记录到分发台账中——随机数字一旦丢失,文件就无法再打开;分发前可先用台账中的一条记录试开一份验证。
获取 SpireToken Key
- 联系 该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。或访问 https://www.e-iceblue.com/TemLicense.html获得试用/商业 API 密钥
在代码中配置:
AIOptions options = new AIOptions();options.SpireToken = key;









