Dcf Model
在Excel中构建专业级的DCF估值模型——包括收入预测、自由现金流构建、加权平均资本成本(WACC)、终值、熊市/基准/牛市情景分析以及5x5敏感性分析表。可与excel-author配合使用。适用于内在价值股票分析。
技能元数据
| 来源 | 可选 — 通过 hermes skills install official/finance/dcf-model 安装 |
| 路径 | optional-skills/finance/dcf-model |
| 版本 | 1.0.0 |
| 作者 | Anthropic (由 Nous Research 改编) |
| 许可 | Apache-2.0 |
| 平台 | linux, macos, windows |
| 标签 | finance, valuation, dcf, excel, openpyxl, modeling, investment-banking |
| 相关技能 | excel-author, pptx-author, comps-analysis, lbo-model, 3-statement-model |
以下是 Hermes 在触发此技能时加载的完整技能定义。这是智能体在技能激活时看到的指令。
环境
此技能假定为无头 openpyxl — 您正在磁盘上生成一个 .xlsx 文件。
请遵循 excel-author 技能中关于单元格着色、公式、命名范围和敏感性表的规范。
在交付前重新计算:python /path/to/excel-author/scripts/recalc.py ./out/model.xlsx。
DCF 模型构建器
概述
此技能按照投资银行标准,创建用于股权估值的机构级 DCF 模型。每次分析都会生成一个详细的 Excel 模型(灵敏度分析包含在 DCF 工作表的底部)。
工具
- 默认使用用户提供的所有信息以及可用于数据获取的 MCP 服务器。
关键约束 - 请先阅读这些
这些约束适用于所有 DCF 模型的构建。开始前请先审阅:
公式优先于硬编码(不可协商):
- 每个预测、利润率、折现因子、现值和灵敏度单元格都必须是活动的 Excel 公式 — 绝不能是用 Python 计算并写为数字的值
- 使用 openpyxl 时:
ws["D20"] = "=D19*(1+$B$8)"是正确的;ws["D20"] = calculated_revenue是错误的 - 唯一允许的硬编码数字是:(1)原始历史输入,(2)假设驱动因素(增长率、WACC 输入、永续增长率 g),(3)当前市场数据(股价、债务余额)
- 如果你发现自己在 Python 中计算结果并写入 — 请停止。当用户更改假设时,模型必须能够灵活调整。
与用户逐步验证(不要端到端构建):
- 数据检索后 → 向用户展示原始输入模块(收入、利润率、股数、净债务)并在预测前确认
- 收入预测后 → 展示预测的总收入和增长率,在构建利润率推导前确认
- FCF 构建后 → 展示完整的 FCF 时间表,在计算 WACC 前确认逻辑
- WACC 计算后 → 展示计算和输入,在折现前确认
- 终值 + 现值计算后 → 展示权益桥接(企业价值 → 股权价值 → 每股价值),在灵敏度表前确认
- 在每个阶段捕获错误 — 在构建灵敏度表后才发现错误的利润率假设意味着要重建所有下游内容
灵敏度表:
- 使用奇数行和列(标准:5×5,有时 7×7)— 这保证了一个真正的中心单元格
- 中心单元格 = 基准情景。 构建轴值,使中间行标题和中间列标题与模型的实际假设完全相等(例如,如果基准 WACC = 9.0%,则中间行为 9.0%;如果永续增长率 g = 3.0%,则中间列为 3.0%)。因此,中心单元格的输出必须等于模型实际隐含的每股价值 — 这是验证表格构建正确的完整性检查。
- 使用中蓝色填充(
#BDD7EE)+ 粗体字高亮显示中心单元格,以便立即可见哪个单元格是基准情景。 - 填充所有单元格(通常 3 个表 × 25 个单元格 = 75)个,使用完整的 DCF 重计算公式
- 使用 openpyxl 循环以编程方式写入公式
- 禁止占位符文本,禁止线性近似,禁止需要手动操作
- 每个单元格必须为该特定假设组合重新计算完整的 DCF
单元格批注:
- 在创建每个硬编码值时添加单元格批注
- 格式:“来源:[系统/文档],[日期],[参考],[如适用则提供 URL]”
- 在移动到下一个部分之前,每个蓝色输入都必须有批注
- 不要推迟到末尾或写“TODO: 添加来源”
模型布局规划:
- 在写入任何公式之前,定义所有部分的行位置
- 首先写入所有标题和标签
- 其次写入所有分隔行和空行
- 然后使用锁定的行位置写入公式
- 创建后立即测试公式
公式重计算:
- 在交付前运行
python recalc.py model.xlsx 30 - 修复所有错误直到状态为“成功”
- 要求零公式错误(#REF!、#DIV/0!、#VALUE! 等)
情景模块:
- 为熊市/基准/牛市情景创建单独的模块
- 在每个模块内,横向显示各预测年度的假设
- 使用 IF 公式:
=IF($B$6=1,[熊市单元格],IF($B$6=2,[基准单元格],[牛市单元格])) - 验证公式是否引用了正确的情景模块单元格
DCF 流程工作流
步骤 1:数据检索与验证
从 MCP 服务器、用户提供的数据和网络获取数据。
数据源优先级:
- MCP 服务器(如已配置)- 来自 Daloopa 等提供商的结构化财务数据
- 用户提供的数据 - 来自其研究的历史财务数据
- 网络搜索/获取 - 当前价格、贝塔系数、债务和现金
验证清单:
- 验证净债务与净现金(对估值至关重要)
- 确认稀释后流通股数(检查近期回购/发行)
- 验证历史利润率与商业模式一致
- 交叉核对收入增长率与行业基准
- 验证税率合理(通常在 21-28%)
步骤 2:历史分析(3-5 年)
分析并记录:
- 收入增长趋势:计算复合年增长率,识别驱动因素
- 利润率变化:跟踪毛利率、EBIT 利润率、FCF 利润率
- 资本密集度:折旧摊销和资本支出占收入的百分比
- 营运资本效率:净营运资本变化占收入增长的百分比
- 回报指标:ROIC、ROE 趋势
创建摘要表显示:
历史指标(最近十二个月):
收入:X 百万美元
收入增长:X% 复合年增长率
毛利率:X%
EBIT 利润率:X%
折旧摊销占收入百分比:X%
资本支出占收入百分比:X%
FCF 利润率:X%
步骤 3:构建收入预测
方法论:
- 从最新的实际收入(最近十二个月或最近财年)开始
- 对每个预测年度应用增长率
- 同时显示金额和计算的增长率百分比
增长率框架:
- 第 1-2 年:反映近期可见性的较高增长率
- 第 3-4 年:逐渐向行业平均水平靠拢
- 第 5 年及以后:接近永续增长率
公式结构:
- 收入(第 N 年)= 收入(第 N-1 年)× (1 + 增长率)
- 增长率 %(第 N 年)= 收入(第 N 年)/ 收入(第 N-1 年) - 1
三种情景方法:
熊市情景:保守增长(例如 8-12%)
基准情景:最可能情景(例如 12-16%)
牛市情景:乐观增长(例如 16-20%)
步骤 4:运营费用建模
固定/可变成本分析:
运营费用应模拟现实的经营杠杆:
- 销售与市场费用:根据商业模式,通常为收入的 15-40%
- 研发费用:对于科技公司,通常为收入的 10-30%
- 一般及行政费用:通常为收入的 8-15%,随着公司规模扩大表现出杠杆效应
关键原则:
- 所有百分比均基于收入,而非毛利
- 建模经营杠杆:随着收入规模扩大,百分比应下降
- 为销售与市场、研发、一般及行政分别设置行项目
- 计算 EBIT = 毛利润 - 总运营费用
利润率扩张框架:
当前状态 → 目标状态(第 5 年)
毛利率:X% → Y%(基于规模、效率证明)
EBIT 利润率:X% → Y%(收入增长 + 运营费用杠杆的结果)
步骤 5:自由现金流计算
按正确顺序构建 FCF:
EBIT
(-) 税费(EBIT × 税率)
= NOPAT(税后净营业利润)
(+) 折旧摊销(非现金费用,占收入百分比)
(-) 资本支出(占收入百分比,通常 4-8%)
(-) 净营运资本变动(营运资本变化)
= 无杠杆自由现金流
营运资本建模:
- 计算为收入变化(增量收入)的百分比
- 典型范围:收入变化的 -2% 至 +2%
- 负数 = 现金来源(营运资本释放)
- 正数 = 现金用途(营运资本积累)
维护性 vs 增长性资本支出:
- 维护性资本支出:维持当前运营(约占收入 2-3%)
- 增长性资本支出:支持扩张(额外 2-5% 收入)
- 总资本支出应与公司的增长战略保持一致
步骤 6:资本成本(WACC)研究
用于计算权益成本的 CAPM 方法论:
权益成本 = 无风险利率 + 贝塔系数 × 权益风险溢价
其中:
- 无风险利率 = 当前 10 年期国债收益率
- 贝塔系数 = 5 年期月度股票贝塔系数 vs 市场指数
- 权益风险溢价 = 5.0-6.0%(市场标准)
债务成本计算:
税后债务成本 = 税前债务成本 × (1 - 税率)
从以下来源确定税前债务成本:
- 信用评级(如有)
- 公司债券的当前收益率
- 财务报表中的利息费用 / 总债务
资本结构权重:
权益市值 = 当前股价 × 流通股数
净债务 = 总债务 - 现金及等价物
企业价值 = 市值 + 净债务
权益权重 = 市值 / 企业价值
债务权重 = 净债务 / 企业价值
WACC = (权益成本 × 权益权重) + (税后债务成本 × 债务权重)
特殊情况:
- 净现金头寸:如果现金 > 债务,净债务为负数
- 债务权重可能为负
- WACC 计算相应调整
- 无债务:WACC = 权益成本
典型 WACC 范围:
- 大盘股,稳定型:7-9%
- 成长型公司:9-12%
- 高增长/高风险:12-15%
步骤 7:折现率应用(5-10 年预测)
年中惯例:
- 假定现金流在年中发生
- 折现期:0.5, 1.5, 2.5, 3.5, 4.5 等
- 折现因子 = 1 / (1 + WACC)^期间
现值计算:
对于每个预测年:
FCF 的现值 = 无杠杆 FCF × 折现因子
示例(第 1 年):
FCF = $1,000
WACC = 10%
期间 = 0.5
折现因子 = 1 / (1.10)^0.5 = 0.9535
现值 = $1,000 × 0.9535 = $954
预测期选择:
- 5 年:大多数分析的标准
- 7-10 年:具有较长跑道的高增长公司
- 3 年:成熟、稳定的业务
步骤 8:终值计算
永续增长法(首选):
终值 FCF = 最后一年 FCF × (1 + 永续增长率)
终值 = 终值 FCF / (WACC - 永续增长率)
关键约束:永续增长率 < WACC(否则价值无限)
永续增长率选择:
- 保守型:2.0-2.5%(GDP 增长率)
- 温和型:2.5-3.5%
- 激进型:3.5-5.0%(仅适用于市场领导者)
不应超过:无风险利率或长期 GDP 增长率
退出倍数法(替代方法):
终值 = 最后一年 EBITDA × 退出倍数
其中退出倍数来自:
- 行业可比交易倍数
- 先例交易倍数
- 典型范围:8-15 倍 EBITDA
终值的现值:
终值的现值 = 终值 / (1 + WACC)^最后期间
其中最后期间考虑了时间点:
采用年中惯例的 5 年模型:期间 = 4.5
终值完整性检查:
- 应占企业价值的 50-70%
- 如果 >75%,模型可能过度依赖终值假设
- 如果 <40%,检查终值假设是否过于保守
步骤 9:企业价值到股权价值的桥接
估值摘要结构:
(+) 预测 FCF 的现值总和 = $X 百万美元
(+) 终值的现值 = $Y 百万美元
= 企业价值 = $Z 百万美元
(-) 净债务 [或 + 净现金(如果为负)] = $A 百万美元
= 股权价值 = $B 百万美元
÷ 稀释后流通股数 = C 百万股
= 隐含每股价值 = $XX.XX
当前股价 = $YY.YY
隐含回报率 = (隐含价值 / 当前价值) - 1 = XX%
关键调整:
- 净债务 = 总债务 - 现金及等价物
- 如果为正:从企业价值中减去(减少股权价值)
- 如果为负(净现金):加到企业价值上(增加股权价值)
- 使用稀释后流通股数:包括期权、限制性股票单位、可转换证券
- 其他调整(如适用):
- 少数股东权益
- 养老金负债
- 经营租赁义务
估值输出格式:
估值组成部分,金额($M)
显式期 FCF 的现值,X.X
终值的现值,Y.Y
企业价值,Z.Z
(-) 净债务,A.A
股权价值,B.B
,,
流通股数(百万),C.C
隐含每股价值,$XX.XX
当前股价,$YY.YY
隐含上行/(下行)空间,+XX%
步骤 10:灵敏度分析
在 DCF 工作表的底部构建三个灵敏度表,显示估值如何随不同假设变化:
- WACC vs 永续增长率 - 显示企业价值对折现率和永续增长率的敏感性
- 收入增长率 vs EBIT 利润率 - 显示收入增长和经营杠杆的影响
- 贝塔系数 vs 无风险利率 - 显示对权益成本组成部分的敏感性
实现方式:这些是简单的二维网格(不是 Excel 的“数据表”功能),每个单元格包含公式。每个单元格必须包含针对该特定假设组合的完整 DCF 重计算公式。请参阅关键约束部分,了解有关使用 openpyxl 以编程方式填充所有 75 个单元格的详细要求。
<correct_patterns>
本节包含构建 DCF 模型时应遵循的所有正确模式。
情景模块选择模式 - 遵循此方法
假设按单独的情景模块组织:
关键结构 - 每个部分标题占三行:
熊市情景假设(部分标题,合并单元格跨列)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),12%,10%,9%,8%,7%
EBIT 利润率(%),45%,44%,43%,42%,41%
基准情景假设(部分标题,合并单元格跨列)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),16%,14%,12%,10%,9%
EBIT 利润率(%),48%,49%,50%,51%,52%
牛市情景假设(部分标题,合并单元格跨列)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),20%,18%,15%,13%,11%
EBIT 利润率(%),50%,51%,52%,53%,54%
每个情景模块必须有一列标题行,显示部分标题下方的预测年份(FY2025E、FY2026E 等)。没有这个,用户无法判断哪个假设值对应哪一年。
如何引用假设 - 创建汇总列:
- 情景选择器单元格(例如 B6)包含 1=熊市、2=基准或 3=牛市
- 创建一个汇总列,使用 INDEX 或 OFFSET 公式从正确的情景模块中提取
- 预测公式引用汇总列(清晰的单元格引用)
- 每个情景模块包含跨越预测年度的完整 DCF 假设集
推荐的汇总列模式(使用 INDEX):
=INDEX(B10:D10, 1, $B$6)
不是这个 - 散布在各处的 IF 语句:
=IF($B$6=1,[熊市单元格],IF($B$6=2,[基准单元格],[牛市单元格]))
汇总列方法集中了逻辑,使模型更易于审计。
正确的收入预测模式
创建包含 INDEX 公式的汇总列,然后在预测中引用它:
步骤 1 - FY1 增长率的汇总列:
=INDEX([熊市 FY1 增长率]:[牛市 FY1 增长率], 1, $B$6)
步骤 2 - 收入预测引用汇总列:
收入第 1 年:=D29*(1+$E$10)
其中:
- D29 = 上一年收入
- $E$10 = FY1 增长率的汇总列单元格(包含 INDEX 公式)
- $B$6 = 情景选择器(1=熊市,2=基准,3=牛市)
这种方法比在每个预测公式中嵌入 IF 语句更清晰,并且更容易审计使用了哪个情景的假设。
正确的 FCF 公式模式
使用包含 INDEX 公式的汇总列,然后在 FCF 计算中引用它们:
汇总列方法:
项目,公式,参考
折旧摊销,=E29*$E$21,$E$21 = 折旧摊销 % 的汇总列
资本支出,=E29*$E$22,$E$22 = 资本支出 % 的汇总列
净营运资本变动,=(E29-D29)*$E$23,$E$23 = 净营运资本 % 的汇总列
无杠杆 FCF,=E57+E58-E60-E62,E57=NOPAT E58=折旧摊销 E60=资本支出 E62=净营运资本变动
每个汇总列单元格包含一个 INDEX 公式,根据情景选择器从相应的情景模块中提取。这保持了预测公式的清晰性和可审计性。
在写入公式之前,确认情景模块的行位置并设置汇总列。
正确的单元格批注格式
每个硬编码值都需要此格式:
“来源:[系统/文档],[日期],[参考],[如适用则提供 URL]”
示例:
项目,来源批注
股价,来源:市场数据脚本 2025-10-12 收盘价
流通股数,来源:10-K FY2024 第 45 页 注释 12
历史收入,来源:10-K FY2024 第 32 页 合并财务报表
贝塔系数,来源:市场数据脚本 2025-10-12 5 年期月度贝塔系数
一致预期估计,来源:管理层指引 Q3 2024 财报电话会议
正确的假设表结构
关键:每个情景模块需要三个结构元素:
- 部分标题行(合并单元格):例如,“熊市情景假设”
- 列标题行显示年份 - 这是必需的,不要跳过
- 数据行包含假设值
结构:
熊市情景假设(部分标题 - 合并 A:G 列)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),X%,X%,X%,X%,X%
EBIT 利润率(%),X%,X%,X%,X%,X%
永续增长率,X%,,,,
WACC,X%,,,,
基准情景假设(部分标题 - 合并 A:G 列)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),X%,X%,X%,X%,X%
EBIT 利润率(%),X%,X%,X%,X%,X%
永续增长率,X%,,,,
WACC,X%,,,,
牛市情景假设(部分标题 - 合并 A:G 列)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),X%,X%,X%,X%,X%
EBIT 利润率(%),X%,X%,X%,X%,X%
永续增长率,X%,,,,
WACC,X%,,,,
没有显示预测年份(FY2025E、FY2026E 等)的列标题行,用户无法判断哪个假设值对应哪一年。此行是必需的。
然后创建一个汇总列(通常是右侧的下一列),使用 INDEX 公式根据情景选择器从选定的情景模块中提取。此汇总列是您的预测公式所引用的。
正确的行规划过程
1. 首先写入所有标题和标签:
行,内容
1,[公司名称] DCF 模型
2,股票代码 | 日期 | 财年结束日
4,情景选择器
7,关键假设
26,假设标题
27-31,增长假设
...,...
2. 写入所有分隔行和空行
3. 然后使用锁定的行位置写入公式
4. 创建后立即测试公式
把它想象成建筑:
- 好的做法:先打地基,然后砌墙(结构稳定)
- 坏的做法:先砌墙,然后打地基(墙会倒塌)
Excel 版本:
- 好的做法:添加标题,然后写入公式(公式稳定)
- 坏的做法:先写公式,然后添加标题(公式会出错)
正确的灵敏度表实现
重要:这些不是 Excel 的“数据表”功能。这些是简单的网格,您使用 openpyxl 编写常规公式。是的,这意味着总共约 75 个公式(3 个表 × 每个表 25 个单元格),但这很简单且是必需的。
使用公式进行程序化填充:
每个灵敏度表必须完全填充公式,以重新计算每种假设组合下的隐含每股价值。不要使用 Excel 的数据表功能(它需要手动干预,无法通过 openpyxl 自动化)。
实现方法 - 具体示例:
表结构 — 5×5 网格(奇数尺寸,基准情景居中):
如果模型的基准 WACC = 9.0%,基准永续增长率 = 3.0%,则围绕这些值对称构建轴:
WACC vs 永续增长率, 2.0%, 2.5%, 3.0%, 3.5%, 4.0%
8.0%, [公式], [公式], [公式], [公式], [公式]
8.5%, [公式], [公式], [公式], [公式], [公式]
9.0%, [公式], [公式], [★ ], [公式], [公式] ← 中间行 = 基准 WACC
9.5%, [公式], [公式], [公式], [公式], [公式]
10.0%, [公式], [公式], [公式], [公式], [公式]
↑
中间列 = 基准永续增长率
★ = 中心单元格。 其公式输出必须等于模型的实际隐含每股价值(来自估值摘要)。为此单元格应用中蓝色填充(#BDD7EE)和粗体字体,以便基准情景在视觉上锚定。
轴值规则: axis_values = [base - 2*step, base - step, base, base + step, base + 2*step] — 围绕基准对称,奇数数量保证有一个中心。
公式模式 - 单元格 B88(WACC=8.0%,永续增长率=2.0%):
B88 中的公式应使用以下内容重新计算隐含价值:
- 来自行标题的 WACC:
$A88(8.0%) - 来自列标题的永续增长率:
B$87(2.0%)
推荐方法: 参考主 DCF 计算,但替换这些值。
示例公式结构:
=([使用 $A88 作为折现率的 FCF 现值总和] + [使用 B$87 作为增长率和 $A88 作为 WACC 的终值] - [净债务]) / [股数]
关键 - 为 5x5 网格中的每个单元格编写公式(每个表 25 个单元格,总共 75 个单元格)。 使用 openpyxl 在循环中以编程方式编写这些公式。不要跳过此步骤或留下占位符文本。
Python 实现模式:
# 填充灵敏度表的伪代码
for row_idx, wacc_value in enumerate(wacc_range):
for col_idx, term_growth_value in enumerate(term_growth_range):
# 构建使用 wacc_value 和 term_growth_value 的公式
formula = f"=<使用 {wacc_value} 和 {term_growth_value} 进行 DCF 重计算>"
ws.cell(row=start_row+row_idx, column=start_col+col_idx).value = formula
灵敏度表在打开模型时必须立即工作,无需用户执行任何手动步骤。
</correct_patterns>
<common_mistakes>
本节包含构建 DCF 模型时应避免的所有错误模式。
错误:简化的灵敏度表近似或占位符文本
不要使用线性近似:
// 错误 - 线性近似
B97: =B88*(1+(0.096-0.116)) // 假设线性关系
// 错误 - 除法捷径
B105: =B88/(1+(E48-0.07)) // 没有重新计算完整 DCF
不要留下占位符文本:
// 错误 - 占位符说明
“注意:使用 Excel 数据表功能(数据 → 模拟分析 → 数据表)来填充灵敏度表。”
// 错误 - 空单元格
[因“这很复杂”而留空单元格]
不要混淆术语:
- ❌ “灵敏度表需要 Excel 的数据表功能”(不 - 那是我们无法使用的特定 Excel 工具)
- ✅ “灵敏度表是每个单元格包含公式的简单网格”(是 - 这正是我们构建的内容)
为什么这些捷径是错误的:
- 线性近似公式实际上并没有重新计算 DCF - 它们只是应用简单的数学调整
- 这些关系不是线性的,因此结果将是不准确的
- 占位符文本需要用户手动干预
- 模型在交付时不能立即使用
- 不专业或未达到客户标准
- 空单元格 = 未完成的交付物
常见的合理化借口要拒绝: “编写 75+ 个公式感觉很复杂,所以我会留下说明让用户手动完成。”
现实: 当您使用 Python 中的 openpyxl 循环时,编写 75 个公式是很简单的。每个公式遵循相同的模式 - 只需替换行/列值。这是交付物中必需的部分。
取而代之的是: 为每个灵敏度单元格填充重新计算完整 DCF 的公式。
错误:缺少单元格批注
不要这样做:
- 创建所有硬编码输入而没有批注
- 想着“我稍后会添加它们”
- 写“TODO: 添加来源”
- 让蓝色输入没有文档
为什么是错误的:
- 无法验证数据来源
- 未能满足 xlsx 技能要求
- 未达到审计标准
- 之后修复浪费时间
取而代之的是: 在创建每个硬编码值时添加单元格批注。
错误:公式行引用错误
症状:
FCF 部分引用了错误的假设行:
折旧摊销:=E29*$E$34 // 应该是 $E$21,但引用了错误的行
资本支出:=E29*$E$41 // 应该是 $E$22,但行发生了偏移
为什么会发生这种情况:
- 首先写入公式
- 然后插入标题
- 所有行引用都发生了偏移
- 现在公式指向错误的单元格 → #REF! 错误
取而代之的是: 首先锁定行布局,然后写入公式。
错误:每个假设在不同情景下使用单行
不要这样构建假设:
假设,熊市,基准,牛市
收入增长率 FY1,10%,13%,16%
收入增长率 FY2,9%,12%,15%
这种垂直布局使得难以观察每个情景内各年度的变化情况。
为什么是错误的:
- 使得难以观察每个情景内假设随年度的演变情况
- 更难比较整个预测期内各情景的假设
- 对于审查情景逻辑来说不太直观
取而代之的是:
- 为每个情景(熊市、基准、牛市)创建单独的模块
- 在每个模块内,横向显示各预测年度的假设
- 这使得每个情景的假设作为一套连贯的集合更易于审查。
错误:没有边框
不要交付没有边框的模型:
- 没有部分划分
- 所有单元格混在一起
- 难以阅读且不专业
为什么是错误的:
- 未达到客户标准
- 难以导航
- 看起来业余
取而代之的是: 在所有主要部分周围添加边框。
错误:字体颜色错误或没有字体颜色区分
不要这样做:
- 所有文本都是黑色
- 只使用填充颜色(没有字体颜色变化)
- 混淆哪些单元格是蓝色或黑色
为什么是错误的:
- 无法区分输入和公式
- 审计变得不可能
- 违反 xlsx 技能要求
取而代之的是: 所有硬编码输入使用蓝色文本,所有公式使用黑色文本,链接使用绿色文本。
错误:运营费用基于毛利
不要这样做:
销售与市场费用:=E33*0.15 // E33 = 毛利(错误)
为什么是错误的:
- 运营费用随收入扩展,而非毛利
- 产生不现实的利润率变化
- 企业实际上不是这样运作的
取而代之的是:
销售与市场费用:=E29*0.15 // E29 = 收入(正确)
前 5 大错误摘要
- 公式行引用错误 → 在写入公式之前定义所有行位置
- 缺少单元格批注 → 在创建单元格时添加批注,而不是在末尾
- 简化的灵敏度表 → 为所有单元格填充完整的 DCF 重计算公式,而不是近似值
- 情景模块引用错误 → 确保 IF 公式从正确的熊市/基准/牛市模块中提取
- 没有边框 → 添加专业的部分边框以达到客户交付标准
此外,请注意以下错误:
WACC 计算错误
- 在资本结构中混合账面价值和市场价值
- 错误地使用权益贝塔而非资产/无杠杆贝塔
- 对债务成本应用错误的税率
- 无风险利率错误(必须使用当前的 10 年期国债)
- 未能根据净债务与净现金头寸进行调整
增长假设缺陷
- 永续增长率 > WACC(产生无限价值)
- 预测增长率与历史表现不一致
- 忽视行业增长约束
- 收入增长与单位经济模型不一致
- 没有运营证明的利润率扩张
终值错误
- 使用错误的增长方法(永续增长 vs 退出倍数)
- 终值 > 企业价值的 80%(表明过度依赖)
- 终值利润率与稳态假设不一致
- 终值折现期间错误
现金流预测错误
- 运营费用基于毛利而非收入
- 折旧摊销/资本支出百分比与商业模式不一致
- 营运资本变化计算不正确
- 年际间税率不一致
- NOPAT 计算错误
这些错误是最常见的。在开始任何 DCF 构建之前,请重读本节。
</common_mistakes>
Excel 文件创建
本技能使用 xlsx 技能进行所有电子表格操作。 xlsx 技能提供:
- 标准化的公式构建规则
- 数字格式设置约定
- 通过
recalc.py脚本进行自动化公式重算 - 全面的错误检查与验证
本技能创建的所有 Excel 文件必须遵循 xlsx 技能要求,包括零公式错误和正确的重算。
质量评估标准
每个 DCF 模型必须力求实现:
- 基于历史表现的现实收入与利润率假设
- 采用适当资本成本计算方法,包括正确的 CAPM 方法论
- 全面的敏感性分析,展示估值范围
- 清晰的终值计算及其支撑逻辑
- 专业的模型结构,支持情景分析
- 透明化文档记录所有关键假设
输入要求
最低必要输入
- 公司标识:股票代码或公司名称
- 增长假设:预测期的收入增长率(或“使用共识预期”)
- 可选参数:
- 预测期(默认:5年)
- 情景案例(熊市/基准/牛市的增长及利润率假设)
- 永续增长率(默认:2.5-3.0%)
- 如不使用CAPM,可提供具体的WACC输入项
Excel 模型结构
工作表架构
创建两个工作表:
- DCF - 包含底部敏感性分析的主估值模型
- WACC - 资本成本计算
关键:敏感性分析表格位于 DCF 工作表的底部(而非单独的工作表)。这使所有估值输出集中在一起。
公式重算(强制)
创建或修改 Excel 模型后,必须使用 excel-author 技能中的 recalc.py 脚本重算所有公式:
python recalc.py [Excel文件路径] [超时秒数]
示例:
python recalc.py AAPL_DCF_Model_2025-10-12.xlsx 30
该脚本将:
- 使用 LibreOffice 重算所有工作表中的公式
- 扫描所有单元格查找 Excel 错误(#REF!, #DIV/0!, #VALUE!, #NAME?, #NULL!, #NUM!, #N/A)
- 返回包含错误位置和数量的详细 JSON 输出
预期输出格式:
{
"status": "success", // 或 "errors_found"
"total_errors": 0, // 总错误数
"total_formulas": 42, // 文件中的公式数量
"error_summary": {} // 仅当发现错误时存在
}
如发现错误,输出将包含详细信息:
{
"status": "errors_found",
"total_errors": 2,
"total_formulas": 42,
"error_summary": {
"#REF!": {
"count": 2,
"locations": ["DCF!B25", "DCF!C25"]
}
}
}
修复所有错误并重新运行 recalc.py,直至状态为 "success",然后再交付模型。
格式标准
重要:请遵循 xlsx 技能的公式构建规则和数字格式规范。DCF 技能增加了具体的视觉呈现标准。
颜色方案 - 双层:
第一层:字体颜色(xlsx 技能强制规定)
- 蓝色文本 (RGB: 0,0,255):所有硬编码输入(股价、股数、历史数据、假设)
- 黑色文本 (RGB: 0,0,0):所有公式和计算
- 绿色文本 (RGB: 0,128,0):链接到其他工作表(WACC 工作表引用)
第二层:填充颜色 — 专业蓝色/灰色调色板(除非用户另有指定,否则使用默认)
- 保持简洁 — 仅使用蓝色和灰色进行填充。不要引入绿色、黄色、橙色或多种强调色。颜色过多的模型看起来不专业。
- 默认填充调色板:
- 章节标题:深蓝色背景 (RGB: 31,78,121 /
#1F4E79) 配白色粗体文字 - 子标题/列标题:浅蓝色背景 (RGB: 217,225,242 /
#D9E1F2) 配黑色粗体文字 - 输入单元格:浅灰色背景 (RGB: 242,242,242 /
#F2F2F2) 配蓝色字体 — 或纯白背景配蓝色字体以追求极致简洁 - 计算单元格:白色背景配黑色字体
- 输出/汇总行(每股价值、企业价值等):中等蓝色背景 (RGB: 189,215,238 /
#BDD7EE) 配黑色粗体字体
- 章节标题:深蓝色背景 (RGB: 31,78,121 /
- 仅此而已 — 3种蓝色 + 1种灰色 + 白色。 抑制添加更多颜色的冲动。
- 用户提供的模板或明确的颜色偏好始终优先于这些默认值。
两层如何协同工作:
- 输入单元格:蓝色字体 + 浅灰色填充 = “硬编码输入”
- 公式单元格:黑色字体 + 白色背景 = “计算值”
- 工作表链接:绿色字体 + 白色背景 = “来自另一工作表的引用”
- 关键输出:黑色粗体字体 + 中等蓝色填充 = “这是答案”
字体颜色告诉你这是什么(输入/公式/链接)。填充颜色告诉你身在何处(标题/数据/输出)。
边框标准(专业外观必需)
粗边框 (1.5pt) 围绕主要部分:
- 关键输入 部分
- 预测假设 部分
- 5年现金流预测 部分
- 终值 部分
- 估值汇总 部分
- 每个 敏感性分析 表格
中等边框 (1pt) 分隔子部分:
- 公司详情 vs 历史表现
- 增长假设 vs EBIT利润率 vs FCF参数
细边框 (0.5pt) 围绕数据表:
- 情景假设表 (熊市 | 基准 | 牛市 | 已选)
- 历史与预测财务矩阵
无边框: 表格内的单独单元格(保持干净、可扫描)
边框是强制性的 - 没有专业边框的模型不符合客户交付标准。
数字格式(遵循 xlsx 技能标准):
- 年份:格式化为文本字符串(例如,"2024" 而非 "2,024")
- 百分比:
0.0%(一位小数) - 货币:百万单位用
$#,##0;每股价值用$#,##0.00- 始终在标题中注明单位("收入 ($mm)") - 零值:使用数字格式将所有零值显示为 "-"(例如,
$#,##0;($#,##0);-) - 大数字:
#,##0使用千位分隔符 - 负数:用括号表示
(#,##0)(而非减号)
单元格批注(所有硬编码输入强制要求):
根据 xlsx 技能要求,所有硬编码值必须有单元格批注,说明数据来源。格式:“来源:[系统/文档], [日期], [参考文献], [URL如适用]”
关键:创建单元格时立即添加批注。不要推迟到末尾。
DCF 工作表详细结构
部分 1:标题
行,内容
1,[公司名称] DCF 模型
2,股票代码: [XXX] | 日期: [日期] | 财年结束日: [FYE]
3,空行
4,案例选择单元格 (1=熊市 2=基准 3=牛市)
5,案例名称显示 (公式: =IF([选择器]=1,"熊市",IF([选择器]=2,"基准","牛市")))
部分 2:市场数据(不依赖于案例)
项目,值
当前股价,$XX.XX
流通股数 (百万股),XX.X
市值 ($M),[公式]
净债务 ($M),XXX [或净现金,如为负值]
部分 3:DCF 情景假设
为每个情景(熊市、基准、牛市)创建独立的假设区块,包含 DCF 特定假设(收入增长率 %、EBIT利润率 %、税率 %、折旧摊销占收入比 %、资本支出占收入比 %、净营运资本变动占收入增量比 %、永续增长率、WACC),在预测年份间水平排列。每个区块必须包含章节标题、显示预测年份(FY1、FY2等)的列标题行和数据行。参见 <正确模式> 部分“正确的假设表结构”以获取确切布局。
部分 4:历史及预测财务数据
引用一个汇总列(例如,“已选案例”),该列从情景区块中提取数据,而不是在每个预测行中使用分散的 IF 公式。
利润表 ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E
收入,XXX,XXX,XXX,XXX,[=E29*(1+$E$10)],[=F29*(1+$E$11)],[=G29*(1+$E$12)]
增长率,XX%,XX%,XX%,XX%,[=E29/D29-1],[=F29/E29-1],[=G29/F29-1]
,,,,,,
毛利润,XXX,XXX,XXX,XXX,[=E29*E33],[=F29*F33],[=G29*G33]
利润率,XX%,XX%,XX%,XX%,[=E33/E29],[=F33/F29],[=G33/G29]
,,,,,,
运营费用:,,,,,,,
销售与市场费用,XXX,XXX,XXX,XXX,[=E29*0.15],[=F29*0.14],[=G29*0.13]
研发费用,XXX,XXX,XXX,XXX,[=E29*0.12],[=F29*0.11],[=G29*0.10]
管理费用,XXX,XXX,XXX,XXX,[=E29*0.08],[=F29*0.07],[=G29*0.07]
运营费用合计,XXX,XXX,XXX,XXX,[=E36+E37+E38],[=F36+F37+F38],[=G36+G37+G38]
,,,,,,
息税前利润,XXX,XXX,XXX,XXX,[=E33-E39],[=F33-F39],[=G33-G39]
利润率,XX%,XX%,XX%,XX%,[=E41/E29],[=F41/F29],[=G41/G29]
,,,,,,
所得税,(XX),(XX),(XX),(XX),[=E41*$E$24],[=F41*$E$24],[=G41*$E$24]
税率,XX%,XX%,XX%,XX%,[=E43/E41],[=F43/F41],[=G43/G41]
,,,,,,
税后营业利润,XXX,XXX,XXX,XXX,[=E41-E43],[=F41-F43],[=G41-G43]
关键公式模式:
- 收入增长:
=E29*(1+$E$10),其中 $E$10 是第1年增长的汇总列 - 而非:
=E29*(1+IF($B$6=1,$B$10,IF($B$6=2,$C$10,$D$10)))
这种方法更清晰、更易审计,并通过集中情景逻辑来防止公式错误。
部分 5:自由现金流构建
关键:验证行引用指向正确的假设行。创建公式后立即进行测试。
现金流 ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E
税后营业利润,XXX,XXX,XXX,XXX,[=E45],[=F45],[=G45]
(+) 折旧摊销,XXX,XXX,XXX,XXX,[=E29*$E$21],[=F29*$E$21],[=G29*$E$21]
占收入比,XX%,XX%,XX%,XX%,[=E58/E29],[=F58/F29],[=G58/G29]
(-) 资本支出,(XX),(XX),(XX),(XX),[=E29*$E$22],[=F29*$E$22],[=G29*$E$22]
占收入比,XX%,XX%,XX%,XX%,[=E60/E29],[=F60/F29],[=G60/G29]
(-) 净营运资本变动,(XX),(XX),(XX),(XX),[=(E29-D29)*$E$23],[=(F29-E29)*$E$23],[=(G29-F29)*$E$23]
占收入增量比,XX%,XX%,XX%,XX%,[=E62/(E29-D29)],[=F62/(F29-E29)],[=G62/(G29-F29)]
,,,,,,
无杠杆自由现金流,XXX,XXX,XXX,XXX,[=E57+E58-E60-E62],[=F57+F58-F60-F62],[=G57+G58-G60-G62]
行引用示例(基于布局规划):
- $E$21 = 折旧摊销占比假设(汇总列,第21行)
- $E$22 = 资本支出占比假设(汇总列,第22行)
- $E$23 = 净营运资本占比假设(汇总列,第23行)
- E29 = 当年收入(第29行)
- E45 = 当年税后营业利润(第45行)
在写入公式前:确认这些行号与实际布局匹配。测试一列,然后复制到其他列。
部分 6:折现与估值
DCF估值,2024E,2025E,2026E,2027E,2028E,终值
无杠杆自由现金流 ($M),XXX,XXX,XXX,XXX,XXX,
期间,0.5,1.5,2.5,3.5,4.5,
折现因子,0.XX,0.XX,0.XX,0.XX,0.XX,
自由现金流现值 ($M),XXX,XXX,XXX,XXX,XXX,
,,,,,,
终期自由现金流 ($M),,,,,,,XXX
终值 ($M),,,,,,,XXX
终值现值 ($M),,,,,,,XXX
,,,,,,
估值汇总 ($M),,,,,,
自由现金流现值合计,XXX,,,,,
终值现值,XXX,,,,,
企业价值,XXX,,,,,
(-) 净债务,(XX),,,,,
股权价值,XXX,,,,,
,,,,,,
流通股数 (百万股),XX.X,,,,,
隐含每股价格,$XX.XX,,,,,
当前股价,$XX.XX,,,,,
隐含上涨/(下跌)空间,XX%,,,,,
WACC 工作表结构
权益成本计算,,
无风险利率 (10年期国债),X.XX%,[黄色输入]
Beta (5年月度),X.XX,[黄色输入]
权益风险溢价,X.XX%,[黄色输入]
权益成本,X.XX%,[计算值 蓝色]
,,
债务成本计算,,
信用评级,AA-,[黄色输入]
税前债务成本,X.XX%,[黄色输入]
税率,XX.X%,[链接到DCF工作表]
税后债务成本,X.XX%,[计算值 蓝色]
,,
资本结构,,
当前股价,$XX.XX,[链接到DCF]
流通股数 (百万股),XX.X,[链接到DCF]
市值 ($M),"X,XXX",[计算值]
,,
总债务 ($M),XXX,[黄色输入]
现金及等价物 ($M),XXX,[黄色输入]
净债务 ($M),XXX,[计算值]
,,
企业价值 ($M),"X,XXX",[计算值]
,,
WACC 计算,权重,成本,贡献
权益,XX.X%,X.X%,X.XX%
债务,XX.X%,X.X%,X.XX%
,,
加权平均资本成本,X.XX%,[绿色 输出]
关键 WACC 公式:
市值 = 股价 × 股数
净债务 = 总债务 - 现金
企业价值 = 市值 + 净债务
权益权重 = 市值 / 企业价值
债务权重 = 净债务 / 企业价值
WACC = (权益成本 × 权益权重) + (税后债务成本 × 债务权重)
敏感性分析(DCF 工作表底部)
术语提醒:“敏感性表”是指具有行标题、列标题和每个数据单元格内公式的简单二维网格。不是 Excel 的“数据表”功能(数据 → 模拟分析 → 数据表)。您将使用 openpyxl 将常规 Excel 公式写入每个单元格。
位置:DCF 工作表的第 87 行及之后(不是单独的工作表)
三个垂直堆叠的敏感性表:
- WACC vs 永续增长率(第87-100行) - 5x5网格 = 25个含公式的单元格
- 收入增长率 vs EBIT利润率(第102-115行) - 5x5网格 = 25个含公式的单元格
- Beta vs 无风险利率(第117-130行) - 5x5网格 = 25个含公式的单元格
总需写入公式数:75个(此为强制要求,非可选)
关键:所有敏感性表单元格必须使用 openpyxl 以编程方式填充公式。不要使用线性近似捷径。不要留有占位符文本或手动步骤说明。不要以“太复杂”为由将单元格留空——使用 Python 循环生成公式。
表格设置:
- 创建带有行/列标题的表格结构(要测试的假设值)
- 为每个数据单元格填充公式,该公式:
- 使用行标题值(例如,WACC = 9.0%)
- 使用列标题值(例如,永续增长率 = 3.0%)
- 使用这些特定假设重新计算整个 DCF
- 返回该情景下的隐含每股价格
- 交付时,所有单元格必须包含有效公式
- 为单元格设置条件格式:绿色色阶表示较高值,红色色阶表示较低值
- 将基准案例单元格加粗
- 在表格之间留出1-2个空行
无需手动干预 - 敏感性表在用户打开文件时必须完全可用。
情景选择器实现
三情景框架:
熊市情景
- 保守的收入增长(历史范围低端)
- 利润率承压或无扩张
- 较高的 WACC(风险溢价上升)
- 较低的终端增长率
- 较高的资本支出假设
基准情景
- 符合共识或管理层指引的收入增长
- 基于经营杠杆的适度利润率扩张
- 当前市场隐含的 WACC
- 与 GDP 增长一致的终端增长率(2.5-3.0%)
- 标准的资本支出假设
牛市情景
- 乐观的收入增长(预测范围高端)
- 显著的利润率扩张
- 较低的 WACC(风险溢价降低)
- 较高的终端增长率(3.5-5.0%)
- 资本支出强度降低
公式实现:
不要使用分散的嵌套 IF 公式。 相反,创建一个汇总列,使用 INDEX 或 OFFSET 公式从相应的情景模块中提取数据。
推荐模式(使用 INDEX):
=INDEX(B10:D10, 1, $B$6) 其中 B10:D10 = 熊市/基准/牛市情景值,1 = 行偏移量,$B$6 = 情景选择器单元格(1,2 或 3)
然后在所有预测中引用汇总列:
Revenue Year 1: =D29*(1+$E$10) 其中 $E$10 是第一年增长率的汇总列值。
这种方法将情景逻辑集中化,使模型更易于审计和维护。
交付成果结构
文件命名:[股票代码]_DCF_Model_[日期].xlsx
两张工作表:
- DCF - 完整模型,包含熊市/基准/牛市情景 + 底部三张敏感性分析表(WACC 与终端增长率、收入增长率与 EBIT 利润率、贝塔与无风险利率)
- WACC - 资本成本计算
关键特性:情景选择器(1/2/3),包含 INDEX/OFFSET 公式的汇总列,颜色编码的单元格,所有输入项的单元格注释,专业的边框。
最佳实践
模型构建
- 增量构建:完成每个部分后再进入下一部分
- 边建边测:输入样本数字以验证公式
- 使用一致的结构:类似的计算遵循类似的模式
- 注释复杂公式:为非标准计算添加说明
- 内置检查:在适用处进行加总检查和平衡检查
文档记录
- 记录所有假设:解释关键输入背后的原因
- 引用数据来源:注明每个数据点的出处
- 解释方法论:描述任何非标准的方法
- 标记不确定性:突出显示能见度有限的领域
质量控制
- 交叉核对计算:以多种方式验证数学运算
- 压力测试假设:运行敏感性分析以确保模型稳健
- 同行评审:让他人检查公式
- 版本控制:随着工作进展保存版本
常见变体
高增长科技公司
- 较长的预测期(7-10 年)
- 较高的初始增长率(20-30%)
- 随时间推移显著的利润率扩张
- 较高的 WACC(12-15%)
- 对单位经济性进行建模(用户数、ARPU 等)
成熟/稳定型公司
- 较短的预测期(3-5 年)
- 温和的增长率(GDP +1-3%)
- 稳定的利润率
- 较低的 WACC(7-9%)
- 关注现金生成和资本配置
周期性公司
- 对整个经济周期建模
- 在周期中点对利润率进行正常化
- 考虑谷底和峰值情景
- 根据周期性调整贝塔
多业务线公司
- 为每个业务单元分别进行 DCF 估算
- 不同业务线使用不同的增长率和利润率
- 分部加总估值
- 考虑协同效应
故障排除
如果遇到错误或不合理的结果,请阅读 TROUBLESHOOTING.md 获取详细的调试指导。
工作流集成
DCF 构建开始时
-
收集市场数据:
- 检查是否有可用的 MCP 服务器获取当前市场数据
- 使用网络搜索/抓取获取股价、贝塔及其他市场指标
- 如果需要特定数据,向用户请求
-
收集历史财务数据:
- 检查是否有可用的 MCP 服务器(Daloopa 等)
- 如果通过 MCP 无法获取,则向用户请求
- 必要时手动从 10-K 报告中提取
-
开始模型构建,使用此技能中详述的 DCF 方法论
模型构建过程中
- 使用 openpyxl 构建 Excel 模型,使用公式(非硬编码值)
- 遵循 xlsx 技能约定进行公式构建和格式设置
- 仅当用户要求或提供特定品牌指南时才应用填充颜色
交付模型前(必须)
-
验证结构:
- 包含熊市/基准/牛市情景模块及跨预测年度的假设
- 情景选择器功能正常,公式引用正确的情景模块
- 敏感性分析表位于 DCF 工作表底部(而非单独的工作表)
- 字体颜色:蓝色代表输入值,黑色代表公式,绿色代表工作表链接
- 所有硬编码输入都有单元格注释
- 主要部分有专业的边框
-
重新计算公式:运行
python recalc.py model.xlsx 30 -
检查输出:
- 如果
status为"success"→ 继续步骤 4 - 如果
status为"errors_found"→ 检查error_summary并阅读 TROUBLESHOOTING.md 获取调试指导
- 如果
-
修复错误并重新运行 recalc.py,直到状态为 "success"
-
抽查公式:
- 测试一个自由现金流公式 - 它是否引用了正确的假设行?
- 更改情景选择器 - 汇总列是否正确更新?
- 验证收入公式是否引用汇总列(而非嵌套 IF 公式)
-
交付模型
可用数据源
- MCP 服务器:如果已配置(用于历史财务数据的 Daloopa)
- 网络搜索/抓取:用于当前股价、贝塔及市场数据
- 用户提供的数据:历史财务数据、一致预期
- 手动提取:美国 SEC EDGAR 文件作为后备方案
最终输出检查清单
交付 DCF 模型前:
必需项:
- 运行
python recalc.py model.xlsx 30直到状态为 "success"(零公式错误) - 两张工作表:DCF(底部包含敏感性分析表)、WACC
- 字体颜色:蓝色=输入值,黑色=公式,绿色=工作表链接
- 所有硬编码输入都有单元格注释
- 敏感性分析表完全由公式填充
- 主要部分有专业的边框
验证:
- 运营支出基于收入(而非毛利润)
- 终端价值占企业价值的 50-70%
- 终端增长率 < WACC
- 税率 21-28%
- 文件命名:
[股票代码]_DCF_Model_[日期].xlsx
数据来源——MCP 优先,网络后备
以下许多段落提到“使用 S&P Kensho MCP / Daloopa MCP / FactSet MCP”。这些是原始 Cowork 插件上下文中的商业金融数据 MCP。在 Hermes 中:
- 如果您配置了任何结构化金融数据 MCP(Hermes 支持 MCP——请参阅
native-mcp技能),请优先使用它获取时点可比公司、先例交易和文件。 - 否则,请使用:
web_search/web_extract访问 SEC EDGAR (https://www.sec.gov/cgi-bin/browse-edgar) 获取美国文件- 公司投资者关系页面获取新闻稿、业绩演示文稿
browser_navigate访问交互式数据门户- 用户提供的数据(当上下文中没有时明确询问)
- 切勿捏造数据。如果无法获取某个倍数、先例或文件编号,请将单元格标记为
[UNSOURCED]并告知用户。
归属
此技能改编自 Anthropic 的 Claude 金融服务插件套件(Apache-2.0 许可证)。Office-JS / Cowork 实时 Excel 路径已被移除;此版本通过 excel-author 技能约定针对无头 openpyxl。原始版本:https://github.com/anthropics/financial-services