对账是企业财务中最频繁也最繁琐的工作之一。而这源数据往往各不相同,银行流水从网银导出的 CSV 文件,系统交易记录则可能是 PDF 格式的明细报表。两份表的列名不同、日期和金额格式不一,甚至夹杂空格、缺失值。本文介绍如何使用 Spire.Agent.Office Excel AI 能力自动读取 CSV 与 PDF 两种格式的数据源,识别并映射列名,清理数据最终生成Excel 对账明细。
有关产品安装和 SpireToken 配置,请参考 在 .NET 项目中集成 Spire.Agent.Office。以下示例默认已安装 Spire.Agent.Office 并完成 SpireToken 配置。
按流水号对账
csv 格式的银行流水与PDF 格式的系统交易记录按流水号进行对账分析。
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Xls;
// 银行流水(CSV)与系统交易记录(PDF)数据源文件
string[] attachmentPaths = new string[]
{
@"bank-statement.csv",
@"system-records.pdf"
};
// Excel 处理相关配置
string inputPath = "";
string savePath = "out.xlsx";
// SpireToken Key
string key = "**************************";
string instruction =
"对附件中的银行流水(CSV)与系统交易记录(PDF)执行对账:" +
"1.按语义建立两表列映射:交易日期、金额、对方账户、摘要、流水号;" +
"2.清洗:文本去首尾及内部多余空格;日期统一写成yyyy-MM-dd文本;金额去货币符号和千分位转为数字;空摘要或空对方账户标'未知',空金额标'金额缺失';" +
"3.以流水号为唯一键逐笔匹配,标记状态:'已匹配'/'金额不一致'/'仅银行流水'/'仅系统记录';" +
"4.生成'对账明细'工作表:每笔含银行金额、系统金额、差额、对账状态、备注;" +
"5.差异行高亮:金额不一致黄色、仅银行流水橙色、仅系统记录蓝色;" +
"最终保存为Excel文件";
// 调用Excel文档处理函数
AIResult result = ExecuteDemoExcel(instruction, inputPath, savePath, key, attachmentPaths);
// 执行Excel文档AI处理
static AIResult ExecuteDemoExcel(string instruction, string inputPath, string savePath, string key, string[] attachmentPaths)
{
// 创建AIOptions选项配置对象
AIOptions options = new AIOptions();
options.SpireToken = key;
// 使用Workbook对象处理Excel文档
using (Workbook workbook = new Workbook())
{
// 从文件加载Excel模板
if (!string.IsNullOrEmpty(inputPath) && File.Exists(inputPath))
{
workbook.LoadFromFile(inputPath);
}
// 创建AI文档处理器
AIWorkbookProcessor processor = workbook.AI(options);
// 执行AI指令
return processor.ExecuteInstruction(workbook, instruction, savePath, attachmentPaths);
}
}
原银行流水CSV
原系统交易PDF
Excel AI对账后的对账明细

按日期与金额组合对账
当数据源不含唯一流水号,可以改用"交易日期 + 金额"的组合作为匹配键进行对账:先按日期分组,再在相同日期内用金额逐笔配对。
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Xls;
// 不含流水号的银行流水(CSV)与系统交易记录(PDF)数据源文件
string[] attachmentPaths = new string[]
{
@"bank-statement-noId.csv",
@"system-records-noId.pdf"
};
// Excel 处理相关配置
string inputPath = "";
string savePath = "out.xlsx";
// SpireToken Key
string key = "**************************";
string instruction =
"对附件中的银行流水(CSV)与系统交易记录(PDF)执行对账:" +
"1.按语义建立两表列映射:交易日期、金额、对方账户、摘要;" +
"2.清洗:文本去多余空格;日期统一写成yyyy-MM-dd文本;金额转为数字;缺失值标'未知'或'金额缺失';" +
"3.以'交易日期+金额'组合为键对账:先按日期分组,再在相同日期内按金额逐笔配对,标记状态:'已匹配'/'金额不一致'/'仅银行流水'/'仅系统记录';" +
"4.生成'对账明细'工作表(银行金额、系统金额、差额、状态);" +
"5.差异行高亮:金额不一致黄色、仅银行流水橙色、仅系统记录蓝色;" +
"最终保存为Excel文件";
// 调用Excel文档处理函数
AIResult result = ExecuteDemoExcel(instruction, inputPath, savePath, key, attachmentPaths);
// 执行Excel文档AI处理
static AIResult ExecuteDemoExcel(string instruction, string inputPath, string savePath, string key, string[] attachmentPaths)
{
// 创建AIOptions选项配置对象
AIOptions options = new AIOptions();
options.SpireToken = key;
// 使用Workbook对象处理Excel文档
using (Workbook workbook = new Workbook())
{
// 从文件加载Excel模板
if (!string.IsNullOrEmpty(inputPath) && File.Exists(inputPath))
{
workbook.LoadFromFile(inputPath);
}
// 创建AI文档处理器
AIWorkbookProcessor processor = workbook.AI(options);
// 执行AI指令
return processor.ExecuteInstruction(workbook, instruction, savePath, attachmentPaths);
}
}
原银行流水CSV
原系统交易PDF
Excel AI对账后的对账明细

对比传统SDK API处理
| 传统 Spire.Office for .NET API | Spire.Agent.Office 处理 | |
|---|---|---|
| 驱动方式 | 需编写 CSV/PDF 解析、列映射、数据清洗、匹配与异常逻辑等大量代码 | 用自然语言描述对账规则,AI 理解后自动编排执行 |
| 数据格式 | CSV 与 PDF 需分别用不同组件解析、格式各异 | 直接附加 CSV 与 PDF,AI 自动理解内容 |
| 字段映射 | 硬编码列名对应关系,列名或格式变更需改代码 | AI 根据列名与内容语义自动映射 |
| 异常处理 | 需手写差异判定、告警文案与样式逻辑 | AI 自动识别差异并给出处理建议 |
常见问题
银行流水 CSV 中的日期和金额格式不统一
原因:网银导出的 CSV 中,日期可能有 2026-07-01、2026/7/1 等写法,金额可能带 ¥、千分位或前后空格,导致匹配时误判。
解决:在指令中显式要求"将日期统一为 yyyy-MM-dd、金额统一为数字格式并去除空格",AI 会在对账前自动完成标准化。
系统交易 PDF 表格跨页或带页眉页脚
原因:PDF 明细报表可能存在分页、重复页眉或页脚注释,影响 AI 对表格数据的读取。
解决:在指令中添加"忽略页眉页脚与重复的表头行,只读取表格数据行"的描述。
同一笔金额在同一天多次出现导致误匹配
原因:按"日期+金额"组合对账时,同一天可能存在多笔金额相同的交易,无法确定具体对应关系。
解决:优先使用流水号精确对账;若确实无流水号,可在指令中要求"将同日无法一一对应的记录标记为'金额不一致'"。
获取SpireToken Key
- 联系 该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。或访问 https://www.e-iceblue.com/TemLicense.html获得试用/商业 API 密钥
在代码中配置:
AIOptions options = new AIOptions();options.SpireToken = key;









