如何运行多个onEdit函数

时间:2019-08-07 05:41:44

标签: google-apps-script

我有两个onEdit函数可以单独工作,但是我似乎无法正确组合它们以同时运行。

我的目标是为第9列中的单元格添加时间戳,并在第1列中选中此复选框时,将整行复制到新的工作表中。

我遵循了Stackoverflow其他地方发布的关于触发器,重命名功能等的建议,但是至多我只能让第一个功能运行。

function onEdit(e) {

var colToWatch = 1, colToStamp = 9;
var valueToWatch = "TRUE"; 
if (e.range.columnStart === colToWatch && (e.value === valueToWatch || 
typeof e.value == 'object'))
e.source.getActiveSheet()
    .getRange(e.range.rowStart, colToStamp)
    .setValue(typeof e.value === 'object' ? null : new Date());
}

function onEdit(event) {
// assumes source data in sheet named Active
// target sheet of move to named Found 
// test column with yes/no is col 1 or A
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();

if(s.getName() == "Jessica" && r.getColumn() == 1 && r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Done");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
}

}

我希望两个函数都可以运行,但是我担心我得到了太多不同的建议,现在两个函数都不能在编辑时运行。

2 个答案:

答案 0 :(得分:2)

不能有两个共享相同名称的函数,因此在尝试拥有两个单独的onEdit()函数时会遇到问题。重写脚本,以便只有一个功能;并通读triggers

上的指南

答案 1 :(得分:0)

在时间戳功能中,您正在使用Range的两个未定义属性:e.range.columnStarte.range.rowStart。当您将代码替换为e.range.getColumn()e.range.getRow()时,代码将起作用。

我建议重命名功能以描述它们的功能,然后制作一个新的onEdit,以正确的顺序调用这些功能。

这是一个有效的示例:

function onEdit(e) {
  timestamp(e);
  copyRow(e);
}

function timestamp(e) {
  var colToWatch = 1, colToStamp = 9;
  var valueToWatch = "TRUE"; 
  if (e.range.getColumn() === colToWatch &&
     (e.value === valueToWatch || typeof e.value == 'object')) {
    e.source.getActiveSheet()
      .getRange(e.range.getRow(), colToStamp)
      .setValue(typeof e.value === 'object' ? null : new Date());
  }
}

function copyRow(event) {
  // assumes source data in sheet named Active
  // target sheet of move to named Found 
  // test column with yes/no is col 1 or A
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if (s.getName() == "Jessica" &&
      r.getColumn() == 1 &&
      r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Done");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target);
  }
}