你能做的最有价值的事,是带着正确的问题去找负责维护脚本的同事。以下五个问题覆盖了90%的常见超时场景。可以直接把这一节发给对方。
1. "脚本是一行一行读单元格,还是一次性读整个数据区域?"
这是影响最大的单一因素。一次性读取500行数据,和循环500次逐格读取,时间差距可能超过5分钟--执行时长缩减幅度超过95%。如果同事回答"我需要确认一下",说明这个问题值得认真排查。
2. "脚本每次大概跑多久?触发器设的是多高频率?"
把单次运行时长乘以每日触发次数,就是每日运行时长的消耗估算。个人账户每日上限90分钟,Workspace 账户6小时。月末集中跑多个自动化任务时,很可能在同一天内把额度用完。
3. "差异分析表里的自定义函数--就是单元格里直接用等号调用的那些--有没有做跨标签页查找或者多步逻辑?"
单元格中直接调用的自定义函数超时时间是 30秒,不是6分钟。如果 WACC 计算表或其他模型函数偶尔无故显示 Error,30秒超时是第一个应排查的原因--不是公式写错了,是超时了。
4. "脚本有没有把写入操作拆成多个步骤、分开执行?"
写入操作和读取操作一样,逐格写比批量写慢得多。如果脚本对每一行分别写入,并且表格有几百行,这部分就在悄悄消耗执行时间。
5. "现在一共设了几个触发器?"
每个脚本的触发器上限是20个,个人和 Workspace 账户相同。如果把不同模型模块拆成独立触发器分别管理,可能在用完每日运行时长之前,就先撞上触发器数量的天花板。
一个常见误区:Workspace 升级不能突破6分钟
很多团队在遇到脚本超时后,第一反应是"升级账号"。6分钟的单次执行上限对个人账户和 Google Workspace 账户完全相同,付费升级不改变这一限制。
Workspace 的真实优势在于:每日总运行时长从90分钟提升至6小时,以及更大的邮件发送量。如果你们的问题是"脚本每次跑不完",升级 Workspace 不会有任何帮助;如果问题是"同一天内多个自动化任务把额度用完了",Workspace 才是有效解法。
数据"只更新了一半":故障的根本原因
根据 Google 官方文档:"若脚本超出配额或限制,该脚本将被终止并显示错误信息。" 错误提示为 Exceeded maximum execution time。
关键机制:终止前已完成的写入操作会被保留,后续未完成的部分静默丢失。 脚本不会回滚,不会报警,表格里只剩下已经写入的那一半数据。这就是为什么季度结账后差异分析表看起来"填了一半"--前200行是脚本在被终止前完成的,后面是静默丢失的部分。
对于简单脚本而言,6分钟通常远够用。真正触碰上限的,往往是这类任务:从损益表标签页读取实际数据、与预算数据交叉核对、计算36个月差异、将异常标记写入汇报标签页、再发送摘要邮件--每一步都在消耗执行时间,叠加起来很容易超标。
30秒自定义函数超时:比你预期的更容易踩坑
在单元格中以 =MYWACC(假设参数!B3:B10) 方式调用的自定义函数,超时时间是30秒,而非6分钟。故障表现是单元格直接显示 Error,没有任何提示,第一反应往往是"公式引用出了问题"。
如果你的 WACC 计算表或其他自定义函数偶尔无故报错,尤其是函数内部需要从多个标签页拉取数据、进行条件查找或多步逻辑处理时,30秒超时很可能是原因之一。
解决方向:将复杂的单元格自定义函数,改为由按钮触发或定时触发器驱动的普通函数,就能使用完整的6分钟执行时间。可以把本文第三个问题直接发给维护脚本的同事作为排查起点。
Apps Script 在财务模型中的实际承载上限
Apps Script 能够良好支撑以下场景:
- 横跨8至10个标签页、不超过约2,000行的财务模型
- 每小时或更低频率的刷新周期
- 收件人数量不超过1,500人(Workspace)或100人(个人账户)的邮件分发
- 每个财务模型最多20个独立监控或刷新触发器
以下场景开始显现局限:超过5,000行、包含复杂分配逻辑的流水账台账;需要每10分钟运行一次、含跨标签页复杂聚合的多标签页模型;以及任何需要接近实时响应的场景。
对于更重量级的工作流,执行环境本身将成为瓶颈,而非底层业务逻辑。ModelMonkey 在服务端处理 Sheets 操作--完全运行在 Apps Script 执行环境之外--因此不受6分钟执行墙和30秒自定义函数超时的约束。如果你的自动化任务频繁触碰这些上限,这一方案值得关注。
附录:完整配额参考表
配额分为两类:单次执行限制(触发后脚本立即终止)和每日累计配额(跨整个工作流持续累积)。
单次执行限制(触发后脚本强制终止,无法恢复):
| 限制项 | 个人账户(Gmail) | Google Workspace |
|---|---|---|
| 最长执行时间 | 6 分钟 | 6 分钟 |
| 自定义函数超时 | 30 秒 | 30 秒 |
| 最大并发执行数 | 30 | 30 |
每日配额(每日固定时间重置):
| 限制项 | 个人账户(Gmail) | Google Workspace |
|---|---|---|
| 每日总运行时长 | 90 分钟 | 6 小时 |
| 邮件收件人数量 | 100 | 1,500 |
| URL Fetch 调用次数 | 2 万次 | 10 万次 |
| 每脚本触发器数量 | 20 | 20 |
| Properties Service 读写次数 | 5 万次 | 5 万次 |
数据来源:Google Apps Script 官方配额文档(developers.google.com/apps-script/guides/services/quotas),2026年7月核实。
关于触发器调度精度:Apps Script 基于时间的触发器支持最短1分钟的调度间隔,但触发精度并无保证。设置为"每小时"的触发器可能在该小时内任意时刻触发。如果董事会汇报邮件需要在早上6:00准时送达,正确做法是将触发器设为5:00并预留充足缓冲,而不是设为5:55然后寄望于准时执行。
常见问题解答
Q:我们公司用的是 Google Workspace,脚本超时是不是可以突破6分钟限制?
不能。6分钟的单次执行上限对个人账户和 Google Workspace 账户完全相同,付费升级不改变这一限制。Workspace 的优势在于更高的每日总运行时长(6小时 vs. 90分钟)和更大的邮件发送量。
Q:自定义函数(在单元格中直接调用的函数)超时是多久?
30秒,而非6分钟。如果你的 WACC 计算表或其他自定义函数偶尔无故显示 Error,30秒超时是首先应排查的原因,优先于公式引用和数据格式问题。
Q:脚本超时后,已经写入的数据会保留吗?
超时前已完成的写入操作会保留,后续未完成的部分静默丢失。这就是脚本中途终止时表格数据"只更新了一半"的根本原因。
Q:每日90分钟的运行时长是从什么时候开始计算的?
每日配额按固定时间重置(太平洋时间午夜)。如果你在月末集中运行多个自动化任务,需注意同一天内多个触发器的累计运行时长。
Q:我不懂代码,但脚本经常超时,我能做什么?
将本文"五个问题"一节转发给负责维护脚本的同事。通常第一个问题(逐行读取 vs. 批量读取)和第三个问题(自定义函数超时)就能定位大多数超时场景的根本原因。
小结
2026年 FP&A 自动化中需要重点关注的 Apps Script 配额与限制:
- 6分钟是绝对的执行时间上限,个人账户与 Workspace 账户完全相同,升级账号无法突破
- 30秒是自定义函数超时时间--远低于大多数人的预期,单元格显示
Error时应首先排查,优先于公式问题 - 数据"只更新了一半" 是脚本被超时强制终止的典型症状,已完成的写入保留,未完成的静默丢失
- 个人账户每日90分钟的总运行时长在小时级触发器场景下极易耗尽;Workspace 账户享有6小时
- 每脚本20个触发器对于复杂的多任务监控设置是真实约束
- 不写代码的分析师,可将本文"五个问题"一节转发给脚本维护同事,通常能定位90%的超时场景
如需验证数字,可参考 Google 官方配额页面:developers.google.com/apps-script/guides/services/quotas