我正在尝试在单元格1(第1列)中输入“ok”时将工作表“Name1”中的一行复制到工作表“Name2”但我无法在标题中修复此错误(无法调用方法“getActiveSheet “来自undefined)。我已经尝试了所有那些评论的行但没有运气,我正在编辑单元格并在该单元格中输入“ok”但不起作用。
function onEdit2(e) {
//var ss = SpreadsheetApp.getActiveSpreadsheet();
var ss = e.source;
//var s = SpreadsheetApp.openById("1yAJY3gO46A7Wr_fYtVHAB_wSElUdG2kkiH1clRg9o8k").getSheetByName('Name1');
var s = ss.getActiveSheet();
var r = e.source.getActiveRange();
if(s.getName() == "Name1" && r.getColumn() == 1 && r.getValue() == "ok") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Name2");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
我得到的错误是
TypeError: Can not call method "getActiveSheet" from undefined. (Row 135).
我将那些第一行编辑为
var ss = SpreadsheetApp.getActiveSpreadsheet();
// var ss = e.source;
//var s = SpreadsheetApp.openById("1yAJY3gO46A7Wr_fYtVHAB_wSElUdG2kkiH1clRg8o9k").getSheetByName('Lista');
var s = ss.getActiveSheet();
var r = e.source.getActiveRange(); // I get error now here can't call getactiverange from undefined .
答案 0 :(得分:1)
在这一行:
var targetSheet = s.getSheetByName("Name2");
您正在工作表上运行getSheetByName(),并且需要在电子表格上运行才能获取其他工作表< / strong> Name2
,所以只需将该行更改为:
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Name2");
同时将您的功能从onEdit2()
重命名为保留的功能名称onEdit()
,以便触发,或创建Installable Trigger
您的功能应如下所示:
function onEdit(e) {
var ss = e.source;
var s = ss.getActiveSheet();
var r = e.source.getActiveRange();
if(s.getName() == "Name1" && r.getColumn() == 1 && r.getValue() == "ok") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Name2"); // Changed
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
我创建了一个示例电子表格here。
答案 1 :(得分:0)
编辑工作表时,会调用 onEdit()函数,而不是 onEdit2()。 onEdit2 似乎是您的自定义函数,因此您必须自己从其他地方调用它。 (也许来自onEdit()?)。如果是这样,你在调用时传递事件对象 e 吗? (你必须这样称呼它:
onEdit2(e);
如果您没有传递参数 e ,那么您将收到您所看到的错误,因为 ss 将是未定义的。