You need to enable JavaScript to run this app. Google Sheets onEdit报'source' of undefined的TypeError错误
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets onEdit报'source' of undefined的TypeError错误

TypeError: Cannot read property 'source' of undefined 报错解决方法

报错核心成因

这个报错出现的逻辑非常明确:

  • 代码读取的事件对象e不存在,自然找不到它挂载的source属性
  • 最常见的触发场景,是直接在GAS脚本编辑器里手动点击“运行”按钮执行onEdit函数。作为简单触发器,e是Google Sheets在真实发生单元格编辑操作时,自动注入给函数的内置参数,手动触发执行时不会生成这个对象,运行到读取e.source的代码行就会直接抛出上述报错。
  • 现有代码还存在逻辑错位问题:判断的触发编辑列是14列(N列),同时又要往同一行的14列写入当前日期,会形成编辑-触发-再写入-再触发的无限循环,极易触发脚本配额限制导致功能失效。

可直接复用的修正代码

function onEdit(e) {
  // 先做空值拦截,避免无事件对象时直接报错
  if (!e?.range) return;

  const editRow = e.range.getRow();
  const editCol = e.range.getColumn();
  const currentSheet = e.source.getActiveSheet();

  // 逻辑匹配:工作表为"Universe"、非表头行、编辑的是需要监控数据变更的列、不触发时间列本身的循环
  const matchSheet = currentSheet.getName() === "Universe";
  const isDataRow = editRow > 1;
  const isMonitoredColumn = editCol === 1; // 替换为你实际需要监控的、除时间戳列外的列号
  const avoidLoop = editCol !== 14;

  if (matchSheet && isDataRow && isMonitoredColumn && avoidLoop) {
    currentSheet.getRange(editRow, 14).setValue(new Date());
  }
}

新手测试注意事项

  • 测试这个触发器的时候,不要在脚本编辑器直接点运行:需要回到实际的Google Sheets页面,手动修改对应监控列的单元格内容,触发真实的编辑动作,脚本才会正常运行。
  • 记得给时间戳列(也就是你写入日期的14列)设置单元格格式为日期/时间格式,避免写入的日期显示为一串时间戳数字。
  • 如果需要监控整行所有列的变更,只需要把触发条件里的固定列号判断,改成编辑列不在14列、且行号大于1即可,不用写多列判断。

内容的提问来源于stack exchange,提问作者Márthon Marcell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 22:54:05