在采购与销售场景中,比价是最核心也最耗时的环节之一,采购部门收到来自不同供应商的报价表,有的按行排列,有的按列组织,有的包含多项隐形成本,有的单位不统一。Spire.Agent.Office Excel AI 智能体能够理解不同格式的报价表,自动将各供应商的报价对齐到统一模板,计算各项合计与总价,并对最低价进行标记。
本文介绍如何使用 Spire.Agent.Office Excel AI 能力,将多个不同供应商报价表自动对齐到统一模板,计算总价对比并标记最低价。
有关产品安装和 SpireToken 配置,请参考 在 .NET 项目中集成 Spire.Agent.Office。以下示例默认已安装 Spire.Agent.Office 并完成 SpireToken 配置。
Excel格式报价单对比汇总
多版本报价单对比的核心挑战在于:每家供应商的报价表存在差异。
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Xls;
// 不同供应商多个报价单文件
string[] attachmentPaths = new string[]
{
@"vendor_A.xlsx",
@"vendor_B.xlsx",
@"vendor_C.xlsx",
@"vendor_D.xlsx"
};
// 输出模板文件
string inputPath = @"template.xlsx";
// 结果文档
string savePath = @"quote-comparison.xlsx";
string key = "**************************";
string instruction =
"读取附件中的供应商报价表(供应商A、供应商B、供应商C、供应商D),按以下要求处理:" +
"1.识别每家报价表中的品名、单价、数量、总价列,将其对齐到模板中对应供应商(A、B、C、D)的单价和金额列中;" +
"2.如果某供应商未对某产品报价,对应单价和金额单元格留空并标记为'未报价';" +
"3.为有报价的每家供应商计算各项产品的金额(数量×单价)并填入对应列,在模板底部计算各供应商的总报价;" +
"4.在总价行中,将总报价最低的供应商单元格填充绿色背景(RGB:198,224,180);" +
"5.在'最低价供应商'列标注每个产品的最低报价供应商名称,并在'最低价'列填入对应的最低单价;" +
"6.保证同原模板的布局样式、字体和列宽设置;" +
"最终输出保存为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);
}
}
原各供应商Excel报价表
原Excel模板
Excel AI对比后的汇总表

PDF格式报价单对比汇总
原报价单为PDF格式,使用Spire.Agent.Office同样能轻松提取所需数据,并自动完成汇总统计。只需添加不同格式的源文档,AI指令即可复用,无需重复配置,大幅提升处理效率。
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Xls;
// 不同供应商多个报价单文件
string[] attachmentPaths = new string[]
{
@"vendor_A.pdf",
@"vendor_B.pdf",
@"vendor_C.pdf",
@"vendor_D.pdf"
};
// 输出模板文件
string inputPath = @"template.xlsx";
// 结果文档
string savePath = @"quote-comparison.xlsx";
string key = "**************************";
string instruction =
"读取附件中的供应商报价表(供应商A、供应商B、供应商C、供应商D),按以下要求处理:" +
"1.识别每家报价表中的品名、单价、数量、总价列,将其对齐到模板中对应供应商(A、B、C、D)的单价和金额列中;" +
"2.如果某供应商未对某产品报价,对应单价和金额单元格留空并标记为'未报价';" +
"3.为有报价的每家供应商计算各项产品的金额(数量×单价)并填入对应列,在模板底部计算各供应商的总报价;" +
"4.在总价行中,将总报价最低的供应商单元格填充绿色背景(RGB:198,224,180);" +
"5.在'最低价供应商'列标注每个产品的最低报价供应商名称,并在'最低价'列填入对应的最低单价;" +
"6.保证同原模板的布局样式、字体和列宽设置;" +
"最终输出保存为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);
}
}
原各供应商PDF报价表
原Excel模板
Excel AI对比后的汇总表

对比传统SDK API处理
| Spire.Office for .NET API | Spire.Agent.Office | |
|---|---|---|
| 代码量 | 数据读取、行列映射、公式填充、条件格式等需要大量代码 | 1 条自然语言指令智能处理 |
| 格式适配 | 不同格式报价单,传统SDK API要分别使用不同产品处理数据 | 只需使用Excel AI 即可处理不同格式的数据源 |
| 计算逻辑 | 需API设置公式等 | AI 理解自动完成计算和格式设置 |
| 需求变更 | 改代码,重新调试 | 修改指令,即刻生效 |
常见问题
报价表中存在合并单元格导致数据读取错位
原因:供应商报价表可能包含标题合并单元格、跨行合并的分类标签等,影响 AI 对行列结构的判断。
解决:在指令中明确说明"忽略表头合并行,从第 X 行开始读取数据",或提供模板文件作为结构参考。如果仍遇到问题,可以在指令中添加"将合并单元格视为普通单元格,取其左上角值"的描述。
处理后的格式与预期不符
原因:AI 模型在理解复杂表格布局时,可能对列宽、行高、字体等细节的保留不够精确。
解决:在指令中添加"保留模板中现有的列宽、行高、字体、边框和对齐方式"等具体描述。
部分产品的供应商报价缺失
原因:不同供应商提供的产品清单不完全一致,部分供应商可能未对某些产品报价。
解决:在指令中明确缺失项的处理方式,如"将未报价的单元格标记为'未报价'或留空",AI 会自动识别并按要求处理。
获取SpireToken Key
- 联系 该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。 或访问 https://www.e-iceblue.com/TemLicense.html 获得试用/商业 API 密钥
在代码中配置:
AIOptions options = new AIOptions();
options.SpireToken = key;







