无法从未定义的

时间:2016-09-11 11:02:13

标签: google-apps-script google-sheets

我正在尝试在单元格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 . 

2 个答案:

答案 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 将是未定义的。

参考:GAS-trigger-events