financial-services 仓库 xlsx-author 技能详解:基于 openpyxl 的无头 Excel 工作簿产出指南
【免费下载链接】financial-services可将 Claude 转变为金融服务专家,适用于投资银行、股票研究等领域。提供核心及专项插件,支持端到端工作流,集成多数据源,含技能、命令和连接器,可定制适配企业需求。项目地址: https://gitcode.com/GitHub_Trending/fi/financial-services
导读
本文围绕 xlsx-author 技能文档 展开,讲解在无头(headless)运行环境(Managed Agent / CMA 模式)下,如何用 Python + openpyxl 在磁盘上直接生成.xlsx文件,并将其作为文件产物(artifact)交付给编排层。读完本文,你将掌握 xlsx-author 的输出契约、工作簿构建方式、蓝/黑/绿配色与公式约定,以及它与audit-xls、nav-tieout等技能在 Statement Auditor 场景中的配合方式,并了解它与其他 Agent 插件(model-builder、pitch-agent 等)共享同一套约定的实现事实。
一、技能定位:文件型产物的回退方案
xlsx-author是 financial-services 仓库中statement-auditor插件(agents/statement-auditor.md)声明的三个技能之一(nav-tieout·audit-xls·xlsx-author),其 frontmatter 定义如下:
name: xlsx-author description: Produce a .xlsx file on disk (headless) instead of driving a live Excel workbook — for managed-agent sessions with no open Office app.它的适用场景非常明确:当 Agent 运行在无头模式(managed-agent / CMA 模式)下,需要把 Excel 工作簿作为文件产物交付,而不是通过mcp__office__excel_*工具去驱动用户桌面上已打开的 Excel 实例时,就使用本技能。
这一设计在 Managed Agent cookbook 的 agent.yaml 中得到印证:系统提示中追加了"You are running headless. Produce files in ./out/; do not assume an open Office document.",也就是说,托管 Agent 场景根本没有打开的 Office 文档可操作,所有产物必须以文件形式落盘。
何时不要使用本技能
技能文档明确给出了反向约束(When NOT to use):
如果
mcp__office__excel_*工具可用(Cowork 插件模式),应改用这些工具——它们驱动用户的活动工作簿,并带有审查检查点(review checkpoints)。本技能是 headless 运行时的文件产出回退方案。
也就是说,xlsx-author与 Cowork 插件模式是互补关系:一个面向有界面的实时协作,一个面向无人值守的批量产出。
二、输出契约(Output contract)
技能规定了严格的产物交付规范,编排层正是依赖它来收集文件的:
- 写入位置:写到
./out/<name>.xlsx;若./out/目录不存在,需要先创建。 - 返回路径:Agent 必须在最终消息中返回该文件的相对路径,以便编排层(orchestration layer)收集。
这条契约在 Statement Auditor 的实际工作流中有一个具体落点:cookbook 的 README.md 提到flagger(唯一持有 Write 权限的子 Agent)会产出./out/signoff-<batch>.xlsx;flagger.yaml 中正是通过skills: - { path: ../../../plugins/agent-plugins/statement-auditor/skills/xlsx-author }挂载本技能。因此,./out/约定不仅是技能文档的规定,也是整个 statement-auditor cookbook 的通用文件交付约定。
三、如何构建工作簿:openpyxl 最小可运行示例
技能文档给出的构建方式是:写一段简短的 Python 脚本并用 Bash 运行,使用 openpyxl 库。核心示例代码如下:
from openpyxl import Workbook from openpyxl.styles import Font, PatternFill wb = Workbook() ws = wb.active; ws.title = "Inputs" ws["B2"] = "Revenue"; ws["C2"] = 1_250_000_000 ws["C2"].font = Font(color="0000FF") # blue = hardcoded input calc = wb.create_sheet("DCF") calc["C5"] = "=Inputs!C2*(1+Inputs!C3)" # black = formula wb.save("./out/model.xlsx")这个示例麻雀虽小,五脏俱全,涵盖了几个关键要点:
wb.active:新工作簿默认带一个工作表,直接复用并重命名为Inputs,作为所有硬编码输入的集中地。- 跨表公式:
calc["C5"] = "=Inputs!C2*(1+Inputs!C3)"表明 DCF 计算表的公式直接引用 Inputs 表单元格,计算表内不出现任何硬编码数字——这正是"计算单元格全部是公式"约定的直接体现。 - 字体样式:
Font(color="0000FF")用于给输入单元格上色,用颜色标记单元格性质(详见下一节配色约定)。 - 保存:
wb.save("./out/model.xlsx")直接落盘到技能约定的./out/目录。
openpyxl 依赖与版本前提
仓库中对 openpyxl 的依赖要求可以在 pitch-agent/skills/dcf-model/requirements.txt 中看到(该技能同样使用 openpyxl 产出 Excel 模型文件):
openpyxl>=3.0.0即需要 openpyxl 3.0 及以上版本(3.0 起成为xlrd/xlsxwriter之外的主流读写 .xlsx 方案)。此外,dcf-model 的 validate_dcf.py 脚本 展示了 openpyxl 在实际工程中的另外两种典型用法,可作为深化参考:
openpyxl.load_workbook(excel_path, data_only=False):加载公式本身,用于审计公式文本;openpyxl.load_workbook(excel_path, data_only=True):加载公式的计算结果值,用于检查#VALUE!、#DIV/0!、#REF!、#NAME?等错误值。
这提示我们:用xlsx-author产出的文件,后续完全可以被仓库中的audit-xls技能或类似校验脚本再次加载审计,形成"产出 → 校验"闭环。
四、工作簿约定:与 audit-xls 镜像的配色与结构规范
技能文档特别强调:约定与audit-xls技能镜像一致(audit-xls/SKILL.md)。这些约定是金融模型工作簿的"行业级最佳实践",逐条展开如下:
4.1 蓝 / 黑 / 绿三色约定
| 颜色 | 含义 |
|---|---|
| 蓝(Blue) | 硬编码输入(hardcoded input) |
| 黑(Black) | 公式(formula) |
| 绿(Green) | 指向其他工作表/文件的链接(link to another sheet/file) |
在audit-xls的模型结构审查(Structural review)中,同样要求检查"颜色约定是否一致应用(Blue=input, black=formula, green=link)",两处规定完全对应。颜色不是装饰,而是让审计者(人或 Agent)一眼区分"哪些是假设、哪些是计算"的可视化契约。
4.2 计算单元格禁止硬编码
No hardcodes in calc cells.Every calculation cell is a formula; every input lives on an Inputs tab.
所有计算单元格必须是公式;所有输入必须放在 Inputs 工作表上。这一点在audit-xls的公式级检查中也占据核心位置——它将"公式内的硬编码(如=A1*1.05中的1.05)"列为重点排查项,并指出"Hardcoded overrides are the #1 source of silent bugs"(硬编码覆盖是静默错误的第一大来源)。换言之,遵守 xlsx-author 的约定,等于从源头规避审计技能最警惕的一类问题。
4.3 命名区域(Named ranges)
凡是在 Deck 或 Memo 中会被引用的值,都要定义为命名区域(Named ranges)。命名区域让外部文档(PPT 汇报材料、投资备忘录)对模型的引用不再依赖脆弱的单元格坐标,模型结构调整时引用依然稳定。
4.4 平衡检查(Balance checks)
工作簿必须包含一个Checks 工作表,用来做勾稽验证并以 TRUE/FALSE 呈现结果,典型检查包括:
- 资产负债表平衡(BS balances,总资产 = 总负债 + 权益)
- 现金流与现金科目勾稽(CF ties to cash)
这与audit-xls的 model 级完整性检查高度呼应:BS 平衡、Cash tie-out、D&A 匹配、CapEx 匹配、营运资本变动符号等,在 audit-xls 技能 中均有逐项检查清单。在 Statement Auditor 场景中,它还对应 nav-tieout 技能 的 LP 资本账户复算逻辑(期初资本 + 出资 − 分配 + 分配净损益 − 业绩报酬提成 = 期末资本),Checks 表就是把这类勾稽关系固化下来的载体。
4.5 一文件一模型
One model per file.Do not append to an existing workbook unless explicitly asked.
除非用户明确要求,否则不要向已有工作簿追加内容。每个文件对应一个独立模型,避免不同模型的输入/计算混在一个文件里造成交叉污染,也便于审计与版本管理。
五、xlsx-author 在 Statement Auditor 工作流中的位置
理解一个技能最好的方式,是看它在一个真实 Agent 工作流里扮演什么角色。Statement Auditor(statement-auditor.md)是"LP 报表分发前的最后一道眼睛",其工作流如下:
- 读取报表:statement-reader 子 Agent 提取每份 LP 报表的期末余额。报表被视为不可信(可能由上游不受控系统生成),reader 只有 Read/Grep 权限、无 MCP 访问权;
- 对账:通过 NAV MCP 把每个字段与 NAV 数据包逐项比对;
- 标记:把差异交给 flagger,格式化异常清单与签核表(sign-off sheet)。
而xlsx-author正是在第 3 步(及类似产出环节)被调用:cookbook 的 README.md 说明,flagger是唯一持有 Write 权限的子 Agent,它把对账表整理为./out/signoff-<batch>.xlsx(逐份报表给出 pass/hold 建议),且"不直接打开报表文件"。这与 xlsx-author 的"headless 落盘 + 返回相对路径"契约完全一致。
同时要注意安全边界:statement-auditor 采用三层隔离(statement-reader 触碰不可信文档但无写权限;reconciler/编排层读 NAV 数据;flagger 独占 Write),且本 Agent 只给出 pass/hold 建议,最终分发由 IR 团队在人工签核后执行——xlsx-author产出的签核表是"建议层"的产物,不是最终对外分发文件。
六、仓库中的同构技能:一份约定,多处复用
xlsx-author并非 statement-auditor 独有。通过检索 openpyxl 的使用面可以发现,该技能在仓库中被多个 Agent 插件共享,且内容完全同构:
- model-builder/skills/xlsx-author/SKILL.md
- pitch-agent/skills/xlsx-author/SKILL.md
- earnings-reviewer/skills/xlsx-author/SKILL.md
- gl-reconciler/skills/xlsx-author/SKILL.md
- kyc-screener/skills/xlsx-author/SKILL.md
- market-researcher/skills/xlsx-author/SKILL.md
- month-end-closer/skills/xlsx-author/SKILL.md
- valuation-reviewer/skills/xlsx-author/SKILL.md
- financial-analysis/skills/xlsx-author/SKILL.md
从源码结构看,这体现了仓库的设计理念:将"无头产出 Excel 工作簿"这一横切能力抽成统一技能,供各垂直业务 Agent 复用,从而保证所有 Agent 产出的工作簿遵循同一套输出契约与配色/结构规范,下游审计(audit-xls)、校验(validate_dcf.py 等)与编排层收集路径(./out/)可以无缝衔接。
七、实战要点速查
| 维度 | 规范 |
|---|---|
| 产出目录 | ./out/<name>.xlsx(目录不存在则创建) |
| 交付方式 | 最终消息中返回相对路径,供编排层收集 |
| 技术栈 | Python + openpyxl(仓库要求openpyxl>=3.0.0) |
| 输入集中 | 所有硬编码输入放 Inputs 工作表 |
| 计算规范 | 计算单元格一律为公式,禁止硬编码 |
| 配色 | 蓝=输入、黑=公式、绿=跨表/跨文件链接 |
| 命名区域 | 被 Deck/Memo 引用的值必须命名 |
| 平衡检查 | 包含 Checks 工作表,以 TRUE/FALSE 呈现勾稽结果 |
| 文件粒度 | 一文件一模型,除非明确要求否则不追加 |
| 适用模式 | headless / managed-agent / CMA;Cowork 模式改用mcp__office__excel_* |
八、总结
xlsx-author是 financial-services 仓库为无头 Agent 场景设计的标准 Excel 文件产出技能:它通过"./out/落盘 + 相对路径回报"的输出契约打通了与编排层的文件交接,通过"蓝/黑/绿配色、输入与计算分离、命名区域、Checks 平衡表、一文件一模型"的约定保证了产出工作簿的规范性与可审计性,并在 Statement Auditor 的签核表产出(./out/signoff-<batch>.xlsx)等场景中实际落地。掌握它,就等于掌握了在 Managed Agent 模式下用 Python 批量产出高质量金融 Excel 工作簿的标准姿势,也让产出的文件天然兼容仓库内 audit-xls 与校验脚本的后续审计链路。
【免费下载链接】financial-services可将 Claude 转变为金融服务专家,适用于投资银行、股票研究等领域。提供核心及专项插件,支持端到端工作流,集成多数据源,含技能、命令和连接器,可定制适配企业需求。项目地址: https://gitcode.com/GitHub_Trending/fi/financial-services
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考