You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets下拉菜单触发数据复制脚本报错求助

修复后的Google Sheets脚本

报错原因分析

  1. TypeError: Cannot read properties of undefined (reading 'source'):手动运行onEdit函数时,系统不会自动传入event参数,导致event.source无法读取;同时原脚本存在语法错误,加剧了问题。
  2. 语法错误:If应为小写的if,且每个if语句末尾多了分号,导致后续代码块不受条件约束。
  3. 原脚本使用moveTo并删除Main表行,不符合“不删除Main表记录”的需求。

修复后的代码

function onEdit(event) {
  // 防御性判断:避免手动运行时无event参数报错
  if (!event) {
    SpreadsheetApp.getUi().alert("请通过编辑单元格触发此脚本,不要手动运行!");
    return;
  }

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const activeSheet = event.source.getActiveSheet();
  const activeRange = event.source.getActiveRange();

  // 仅处理Main表第6列(Status列)的编辑
  if (activeSheet.getName() !== "Main" || activeRange.getColumn() !== 6) {
    return;
  }

  const statusValue = activeRange.getValue();
  let targetSheetName;

  // 根据Status值匹配目标工作表
  switch(statusValue) {
    case "Completed":
      targetSheetName = "Completed";
      break;
    case "Pending":
      targetSheetName = "Pending";
      break;
    case "Hold":
      targetSheetName = "Hold";
      break;
    default:
      // 非指定状态,不执行操作
      return;
  }

  const targetSheet = ss.getSheetByName(targetSheetName);
  if (!targetSheet) {
    SpreadsheetApp.getUi().alert(`未找到名为${targetSheetName}的工作表,请检查名称!`);
    return;
  }

  const row = activeRange.getRow();
  const numColumns = activeSheet.getLastColumn();
  // 获取目标表下一行的起始位置
  const targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
  // 复制行数据到目标表(保留原表数据)
  activeSheet.getRange(row, 1, 1, numColumns).copyTo(targetRange);
}

关键修改说明

  • 防御性判断:增加if (!event)判断,避免手动运行脚本时触发报错,同时给出明确提示。
  • 语法修正:将If改为小写if,移除if语句末尾的多余分号,确保条件逻辑生效。
  • 逻辑调整:用copyTo替代moveTo,删除deleteRow代码,保留Main表原记录。
  • 代码优化:使用switch语句替代重复的if判断,减少冗余代码,提升可读性。
  • 错误处理:增加目标表不存在的判断,给出提示信息,避免静默失败。

内容的提问来源于stack exchange,提问作者Mohammad Haneef Ahmad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:10:14