Google表格中基于公式的单元格更改未启动onEdit脚本

时间:2016-09-02 01:55:15

标签: google-apps-script google-sheets

我对Google脚本编写完全不熟悉,但我在这里使用了各种帖子来拼凑我需要的内容:当某个列发生更改时,会在行中添加时间戳。这是我目前正在使用的:

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "test" ) { //checks that we're on the correct sheet
    var r = s.getActiveCell();
    if( r.getColumn() == 16 ) { //checks the column
      var nextCell = r.offset(0, 1);
      if( nextCell.getValue() === '' ) //is empty?
        nextCell.setValue(new Date());
    }
  }
}

当我手动更改数据时,这非常有效;但是,脚本正在监视的列从另一个工作表中提取数据,这无法触发触发器/脚本。我如何解决这个问题,以便公式(引用其他表格)的单元格仍会激活我的脚本?

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

onEdit trigger仅在实际用户编辑电子表格时有效。取决于您的用例,但您可以使用Time-driven trigger并在周期性间隔中设置它,并使用函数监视列的更改,这是一个示例:

function monitorColumn() {
  // Add the trigger from the Resources menu in the Script Editor
  // Script Editor > Resources > Current oroject's triggers > Add trigger
  // [monitorColumn] - [Time-driven] - [Hour timer] - [Every hour]

  var s = SpreadsheetApp.getActiveSpreadsheet();
  var ss = s.getSheetByName("test"); // Get the sheet by name

  // Get the values of the columns P & Q with getRange(row, column, numRows, numColumns)
  var columnValues = ss.getRange(1, 16, ss.getLastRow(), 2).getValues();

  // Loop through the values
  for (var i = 0; i < columnValues.length; i++) {

    // If cell in column P is empty and cell in column Q is not empty set todays date
    if(columnValues[i][0] != "" && columnValues[i][1] == ""){

      // While a range index starts at 1, 1, the JavaScript array will be indexed from [0][0].
      ss.getRange(i+1,17).setValue(new Date());
    }
  }
}