Google Sheets Apps Script:forEach编辑器运行正常,时间触发器无数据
问题原因
核心错误是代码中获取数据范围的对象调用错误:
你已经通过ss.getSheetByName("Data")获取到了目标工作表对象ws,但后续获取行数据时错误调用了整个电子表格对象ss的getDataRange()方法:
var values = ss.getDataRange().getDisplayValues();
ss.getDataRange()获取的是当前活动工作表的已用数据范围:
- 手动运行函数时,你浏览器中打开的活动工作表刚好是
Data,所以能拿到正确数据 - 时间驱动触发器运行时无用户交互,默认活动工作表为电子表格的第一个工作表,若
Data不是第一个工作表,拿到的就是其他表的无效数据,自然无法满足模板中r[2] === "RFP" && r[9] !== "On hold"的过滤条件,最终生成的表格tbody为空。
修复方案
将获取数据的代码行修改为用目标工作表对象ws调用getDataRange()即可:
// 原错误代码 // var values = ss.getDataRange().getDisplayValues(); // 替换为以下正确代码 var values = ws.getDataRange().getDisplayValues();
可选排查验证
如果修改后仍有问题,可以在获取values后加一行日志确认数据正确性:
Logger.log("获取到的Data表数据行数:%s,数据内容:%s", values.length, JSON.stringify(values));
查看触发器执行日志即可确认是否正确拿到了Data工作表的所有数据。
内容的提问来源于stack exchange,提问作者OliOp
相关产品推荐
相关产品推荐

