对于你拥有或具备编辑权限的表格,可用的方式要丰富得多。如果你需要对财务模型做严肃的审计,FORMULATEXT 配合一套标准化的审计工作表,比单独使用 Ctrl+` 能走得更远。
只读模式 vs 编辑模式:功能对比
| 功能 | 只读模式 | 编辑权限 |
|---|---|---|
| 公式栏查看单个公式 | ✓ | ✓ |
| Ctrl+` 切换全局公式视图 | ✗ | ✓ |
| FORMULATEXT 函数 | ✗ | ✓ |
| 下载为 .xlsx | 取决于共享设置 | ✓ |
| 制作副本 | 取决于共享设置 | ✓ |
| Apps Script 批量导出 | ✗ | ✓ |
只读模式下真正可用的操作
点击任意单元格,公式栏会显示完整公式,包括跨工作表引用,例如:
=SUMIFS('收入'!D:D,'收入'!B:B,">="&假设!$B$3)
你可以读取公式内容,但无法与之交互。只读模式下没有快捷键可以在整张表格中切换公式视图,只能逐个单元格查看。
如果文件所有者在共享设置中未勾选"禁止下载、打印和复制",你有两条出路:
- 文件 > 下载 > Microsoft Excel (.xlsx):下载一份包含所有公式的完整可编辑副本,在 Excel 中打开或重新上传到 Google Sheets,即可自由操作。
- 文件 > 制作副本:在复制权限开放的前提下有效,会在你的 Google Drive 中创建一份可编辑的独立副本。
如果下载和复制都被禁止,你只能通过公式栏逐个单元格查看公式。此时,建议直接向文件所有者申请编辑权限或请其提供副本。对于已被彻底锁定的文件,没有任何绕过方式。
在自己的模型中显示公式
对于你有控制权的表格,根据需求有三种实用方案。
Ctrl+`(反引号,通常在键盘左上角)可在当前工作表上切换公式视图。由于公式文本较长,列宽会随之错乱,但用于快速浏览已经足够。再按一次即可恢复为数值显示。同样的切换入口在菜单栏:查看 > 显示 > 公式。Mac 上同样使用 Ctrl+`,注意是 Ctrl 而非 Command。
这个方法适合快速核查,但不适合跨多个工作表审计公式一致性,也不适合在模型交接前做系统性文档记录。
FORMULATEXT() 才是真正用于审计工作的利器。根据 Google Workspace 官方文档,它以文本字符串的形式返回单元格的公式,让你可以在独立的审计工作表中建立引用列:
=FORMULATEXT('DCF'!C15)
返回结果类似:
=NPV(假设!$C$4,现金流!D8:H8)+现金流!D8/(假设!$C$4-假设!$C$5)
如需审计整行或整列,可配合 ARRAYFORMULA 使用:
=ARRAYFORMULA(IFERROR(FORMULATEXT('损益表'!C5:C52),""))
这会将损益表 C 列的所有公式一次性输出到审计工作表。如果某单元格存储的是硬编码数值而非公式,FORMULATEXT 会返回 #N/A,IFERROR 则将其替换为空白。扫描审计列中的空白单元格,就能发现公式列中混入的硬编码数字--这是多人协作构建的多年期模型中最常见的错误之一。
截至 2026 年 6 月,FORMULATEXT 可正确处理命名区域和结构化引用,但无法解析 IMPORTRANGE 的输出内容--它只会返回 IMPORTRANGE 公式本身,而非源文件中的底层公式。
用 FORMULATEXT 进行跨工作表一致性检查
在财务模型中,FORMULATEXT 最核心的用途是检查公式结构在各列之间是否保持一致。假设你的 DCF 模型中,第 8 行存放了 5 个预测年度的折现系数:
=ARRAYFORMULA(IFERROR(FORMULATEXT('DCF'!C8:G8),""))
如果每个单元格使用相同的公式结构(每年引用向右偏移一列),输出结果应当高度相似。一旦某处出现硬编码数字、错误的锁定符号或复制粘贴导致的偏移,立刻就能在视觉上发现。
一个来自季度董事会材料的实际场景:损益表中的 EBITDA 利润率应始终引用同一个假设工作表单元格。执行一句:
=ARRAYFORMULA(FORMULATEXT('损益表'!D10:H10))
只需 5 秒,就能抓出那个有人直接输入了"38.5%"而未引用 假设!$C$7 的单元格。
建立可复用的公式审计模板
与其每次临时运行公式检查,不如在模型中建立一张固定的"公式审计"工作表,在每次模型交付或版本存档前跑一遍。以下结构可直接复制粘贴使用。
第一步:新建工作表,命名为"公式审计"。
第二步:在审计工作表中按以下列结构建立关键单元格的逐行引用:
| A 列(检查项) | B 列(公式文本) | C 列(预期引用) | D 列(检查结论) |
|---|---|---|---|
| 营业收入 | =FORMULATEXT('损益表'!D5) | 应引用收入假设 | |
| 毛利率 | =FORMULATEXT('损益表'!D8) | 不应为硬编码数值 | |
| EBITDA | =FORMULATEXT('损益表'!D10) | 应引用 假设!$C$7 | |
| 折现率 | =FORMULATEXT('DCF'!C4) | 应引用 WACC 假设 |
第三步:对需要整列批量检查的区域,用 ARRAYFORMULA 一次性输出:
=ARRAYFORMULA(IFERROR(FORMULATEXT('损益表'!C5:C52),"【值/空】"))
B 列中显示"【值/空】"的行即为硬编码单元格,需人工逐一核查。
第四步:在 D 列记录检查日期和结论,格式建议统一为:
2026年6月18日 已审核 - 无硬编码异常
这套模板适合在以下节点固定使用:模型首次交付前、季度财务报告定稿前、投资人路演数据包提交前、模型换手交接前。每次只需打开"公式审计"工作表,B 列会自动刷新为最新公式文本,扫描空白行即可完成核查。
对于需要一次性全量导出整个模型公式的场景,Apps Script 的 getFormulas() 方法可在 30 秒内将所有工作表的公式文本批量写入审计工作表--适合有代码基础的用户,通过扩展程序 > Apps Script 运行:
function dumpAllFormulas() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var audit = ss.getSheetByName('公式审计') || ss.insertSheet('公式审计');
audit.clearContents();
var tabs = ['损益表', '资产负债表', '现金流量表', 'DCF', '回报分析'];
var row = 1;
tabs.forEach(function(name) {
var sheet = ss.getSheetByName(name);
if (!sheet) return;
var formulas = sheet.getDataRange().getFormulas();
audit.getRange(row, 1).setValue('=== ' + name + ' ===');
row++;
audit.getRange(row, 1, formulas.length, formulas[0].length).setValues(formulas);
row += formulas.length + 2;
});
}
AI 辅助检测的适用场景
当你在处理一个复杂模型,需要发现公式不一致问题,但又不想逐个单元格手动检查时,侧边栏中的 ModelMonkey AI 助手可以读取区域数据,自动标记公式偏离预期模式的单元格--包括公式列中混入的硬编码数值、与既有结构不符的引用等。当模型跨工作表包含 2000 个以上的公式单元格时,这比手动扫描 FORMULATEXT 导出结果要高效得多。
查看 ModelMonkey 方案,支持 Google Sheets 和 Excel。
常见问题
Q:Google Sheets 只读模式下能看到单元格里的公式吗?
可以,但只能逐个查看。点击任意单元格,公式栏会显示完整公式。没有快捷键可以在只读模式下切换全局公式视图。
Q:只读模式下能复制公式内容吗?
如果文件所有者未开启"禁止复制"限制,你可以在公式栏中手动选中公式文本后复制。如果复制权限被关闭,公式栏内容无法选中。
Q:文件所有者同时关闭了下载和复制权限,还有其他办法看公式吗?
没有。对于同时禁止下载、复制的文件,只能逐个单元格通过公式栏查看。没有任何技术手段可以绕过这一限制,建议直接向文件所有者申请权限。
Q:FORMULATEXT 支持哪些类型的公式?
根据 Google Workspace 官方文档,FORMULATEXT 支持标准函数、命名区域、结构化引用和跨工作表引用。但它无法穿透 IMPORTRANGE--只会返回 IMPORTRANGE 公式本身,而非源文件中的底层公式。
Q:FORMULATEXT 返回空白是什么意思?
该单元格包含的是硬编码数值或文本,而非公式。在配合 IFERROR(...,"") 使用时,空白单元格正是需要重点核查的位置。