请求修改Google Apps Script:复制数据后取消复选框并限定触发范围
满足需求的Google Apps Script修改方案
以下是修改后的完整代码,已实现你要求的两个功能:
function onEdit(e){ var ss = SpreadsheetApp.getActive(); var sheet1 = ss.getSheetByName('Sheet1'); var sheet2 = ss.getSheetByName('Sheet2'); var timeZone = Session.getScriptTimeZone(); var d = Utilities.formatDate(new Date(), timeZone, "MM-dd-yyyy | HH:mm:ss"); var cell = e.range; var activeSheet = cell.getSheet(); // 校验触发条件:Sheet1、E列、复选框勾选、行范围3-12 if(activeSheet.getName() === "Sheet1" && cell.getColumn() === 5 && cell.getValue() === true && cell.getRow() >= 3 && cell.getRow() <= 12){ var row = cell.getRow(); var targetRow = sheet2.getLastRow() + 1; // 复制B列数据到Sheet2 sheet1.getRange(row, 2, 1, 1).copyTo(sheet2.getRange(targetRow, 1)); // 写入时间戳 sheet2.getRange(targetRow, 2).setValue(d); // 取消当前复选框勾选状态 cell.setValue(false); } }
关键修改说明
- 限制生效行范围:在判断条件中加入
cell.getRow() >= 3 && cell.getRow() <= 12,确保脚本仅对Sheet1中第3到12行的E列复选框生效 - 自动取消复选框:在完成数据复制和时间戳写入后,通过
cell.setValue(false)将触发的复选框重置为未勾选状态 - 可靠性优化:使用事件参数
e.range替代SpreadsheetApp.getActiveRange(),避免在多单元格编辑等场景下出现逻辑错误
内容的提问来源于stack exchange,提问作者Mergen
相关产品推荐
相关产品推荐

