Apps脚本onEdit调用函数

时间:2018-02-07 18:50:02

标签: google-apps-script triggers google-sheets

当用户更新工作表中的单元格B2时,我试图触发一个函数(我将其命名为“importData”)。 importData函数在手动运行时以及在视图菜单中创建通用onEdit触发器时都有效,但我希望它特定于编辑该特定单元格。

我写了以下onEdit,它可以完成所有操作,但是可以调用我想要的函数。谁能指出我做错了什么?

谢谢。 onEdit和importData如下:

    function onEdit(){
          var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
          var activeCell = ss.getActiveCell();      
          if (activeCell.getRow() == 2 && activeCell.getColumn() == 2) {         
            importData();
          }     
        }


//This function retrieves data from Form Responses.
//It filters based on user input.

function importData() {

  var sourceSS = SpreadsheetApp.openById("1RCObWVpLUyRJsvHLfA89GNUBrKQIvzt_6Sp7Ftq8Gm4");
  var sourceSheet = sourceSS.getSheets()[2];
  var sourceRange = sourceSheet.getRange('C2:I');
  var values = sourceRange.getValues();

  var targetSS = SpreadsheetApp.getActiveSpreadsheet();
  var targetSheet = targetSS.getActiveSheet();
  var personSearchRange = targetSheet.getRange("B2");
  var projectSearchRange = targetSheet.getRange("D2");
  var taskCompletedSearchRange = targetSheet.getRange("B3");

  var filterValues = new Array();
  for (var i = 0; i < values.length; i++){
    if (values [i][4].match(taskCompletedSearchRange.getValue()) && values [i][0].match(projectSearchRange.getValue()) && values [i][5].match(personSearchRange.getValue())){
      filterValues.push(values[i])
    }
}

  var clearRange = targetSheet.getRange(6, 1, targetSheet.getLastRow(), targetSheet.getLastColumn());
  clearRange.clearContent();

  var targetRange = targetSheet.getRange(targetSheet.getLastRow()+1, 1, filterValues.length, filterValues[0].length);
  targetRange.setValues(filterValues);

}

1 个答案:

答案 0 :(得分:0)

Per Cooper的评论,onEdit不适用于我的功能,因为我正在访问另一个电子表格。这需要授权。不幸的是,没有错误,它只是不会这样做。我遵循了Cooper的建议,并使用了一个可以安装的触发器,它是直言不讳但是...感谢您的意见/建议。