当我组合2个onEdit脚本时,我在谷歌表单脚本编辑器上不断出现范围错误



我有一个共享的谷歌工作表,用作待办事项列表。我正在使用脚本编辑器。我最初把所有的东西都移到了第1页的一行。随着添加的内容越来越多,我发现已完成的项目需要移到第二张纸上。我的原始代码将行从第6/F列中的任何输入移走。我尝试添加一个触发器,将第7/G列移动到第2页。这两个代码都可以自己工作,但我似乎无法将它们结合起来。

在研究了这个网站和其他网站后,我尝试了重命名onEdit,嵌套,使用"我的功能",录制宏。我收到了同样的错误,但行会根据我编辑代码的方式而更改"TypeError:无法读取未定义的onEdit@Done的属性"range"。gs:2">

我想要实现的目标,

当任务被标记为完成时,它将移动到工作表2(第7/G列键入"是"(当任务的状态更新时,它会将其移动到工作表1上的一个空行(第6/F列使用了单词——正在进行、待审查、稍后(我也在寻找一个基本的课程,开始理解谷歌工作表的脚本和宏。我意识到我是从中间开始的,这让我自己更加困难。感谢您的反馈和建议!

function onEdit(event) {
// assumes source data in sheet named Sheet1
// target sheet of move to named Sheet2
// test column with yes is col 7 or G
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Sheet1" && r.getColumn() == 7 && r.getValue() == "yes") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Sheet2");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
function onEdit(e) {
const row = e.range.getRow();
const col = e.range.getColumn();
const as = e.source.getActiveSheet();
if(as.getName() == "Sheet1" && col == 6  && row > 1 && !as.getRange(row,col).getValue()=='') {  
const row_new = as.getRange(row,1,1,col);
row_new.copyTo(as.getRange(as.getLastRow()+1,1,1,col));
as.deleteRow(row);
}
}

试试这个:

function onEdit(e) {
e.source.toast('entry');//debug
var s = e.range.getSheet();
s.getRange('P1').setValue(JSON.stringify(e));//debug
if (s.getName() == "Sheet1" && e.range.columnStart == 7 && e.value == "yes") {
e.source.toast('cond1');//debug
var tsh = e.source.getSheetByName("Sheet2");
var trg = tsh.getRange(tsh.getLastRow() + 1, 1);
s.getRange(e.range.rowStart, 1, 1, s.getLastColumn()).copyTo(trg);
s.deleteRow(e.range.rowStart);
}
if (s.getName() == "Sheet1" && e.range.columnStart == 6 && e.range.rowStart > 1 && !e.value) {
e.source.toast('cond2');//debug
const row_new = s.getRange(e.range.rowStart, 1, 1, e.range.columnStart);
row_new.copyTo(s.getRange(s.getLastRow() + 1, e.range.columnStart));
s.deleteRow(e.range.rowStart);
}
}

我添加了通常用于调试这些脚本的工具。祝酒词帮助我在编辑页面时确定代码停止的位置。包括JSON.stringfy(e(的行,我通常放在页面顶部附近的一些未使用的单元格中,这样就可以看到事件对象的内部内容。

此代码有效:(

function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = event.source.getActiveSheet();

var row = event.range.getRow();
var col = event.range.getColumn();
var numColumns = activeSheet.getLastColumn();
if(activeSheet.getName() == "Sheet1" && col == 7 && event.value == "yes") {
var targetSheet = ss.getSheetByName("Sheet2");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
activeSheet.getRange(row, 1, 1, numColumns).moveTo(target);
activeSheet.deleteRow(row);
}
if(activeSheet.getName() == "Sheet1" && col == 6  && row > 1 && !activeSheet.getRange(row,col).getValue()=='') {  
var rowNew = activeSheet.getRange(row,1,1,numColumns);
rowNew.copyTo(activeSheet.getRange(activeSheet.getLastRow()+1,1,1,numColumns));
activeSheet.deleteRow(row);
}
}

最新更新