Google Sheets脚本报错‘Range is not defined’,求解决建议
解决Google Sheets脚本中“Range is not defined”错误的方案
嘿,这个错误其实很好排查——你代码里用到的range变量根本没被定义就直接用啦!从你的注释能看出来,这应该是个监听单元格编辑的触发器脚本,这类脚本需要借助Google Sheets的事件对象才能拿到编辑的单元格范围,我给你一步步修正:
错误根源
你原本的代码里直接写了range.getRow(),但range这个变量从哪来呢?在Google Sheets的编辑触发器中,只有当函数接收了触发器传递的事件对象(通常叫e),才能从里面提取出编辑的单元格范围。
修正后的完整代码
function onEdit(e) { // 从事件对象中获取触发编辑的单元格范围 const range = e.range; // 判断是否是目标单元格D23被编辑,不是就直接退出 if (range.getRow() !== 23 || range.getColumn() !== 4) return; // 将B23设置为当前日期和时间 range.offset(0, -2, 1, 1).setValue(new Date()); // 可选操作:清除B37:T37区域(取消注释即可启用) // range.offset(14, -2, 1, 19).clearContent(); // 复制B23:T36区域,粘贴到B24:T37 const sourceRange = range.offset(0, -2, 14, 19); // 定义源区域:B23到T36 const targetRange = range.offset(1, -2, 14, 19); // 定义目标区域:B24到T37 sourceRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_NORMAL); }
关键说明
- 函数名用
onEdit的话,这是Google Sheets的简单触发器,保存脚本后无需额外设置,只要编辑单元格就会自动触发;如果想用自定义函数名,需要在脚本编辑器的「编辑」→「当前项目的触发器」里手动添加可安装触发器。 - 简单触发器有权限限制,比如不能调用需要授权的服务(比如发送邮件),如果后续你的脚本需要更多功能,记得改成可安装触发器。
- 测试的时候直接编辑D23单元格,就能看到B23自动填充当前时间,同时B23:T36的内容会向下复制一行到B24:T37啦。
内容的提问来源于stack exchange,提问作者Sam Morehouse
相关产品推荐
相关产品推荐

