修改某些特定列时插入“LastUpdate Date”(脚本中的帮助)

时间:2013-06-09 23:59:54

标签: google-apps-script google-sheets

情况:

我有一张包含10张的电子表格,有15位用户登录并修改它。

脚本功能:

当有人修改任何列中的任何行时,此脚本将使用DateTime更新lastcolumn并向进行该修改的用户插入注释。

问题:

(1)性能问题:此脚本在用户修改任何列时运行。这可能是因为我有更多> 3个用户登录电子表格慢慢转动保存。
(2)只有在修改某些特定列时才应运行此脚本。对于ej。:如果活动用户修改列A,B,C; D,E&我脚本用Date& Time更新lastcolumn J;但如果activeuser修改了列F,G,H,则不应运行脚本。

测试用例:

(1)这个脚本运行OnEdit非常好,但是当有人修改任何列中的任何内容时,它会更新lastcoulmn。

如果有人可以帮我修改此脚本,仅在修改特定列时运行,我将不胜感激。

脚本:

    function onEdit(event)
    {
      var ss = SpreadsheetApp.getActiveSpreadsheet();

    //Script Last Update Timming

      var actSht = event.source.getActiveSheet();
      var actRng = event.source.getActiveRange();

      var index = actRng.getRowIndex();
      var dateCol = actSht.getLastColumn();
      var lastCell = actSht.getRange(index,dateCol);
      var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy HH:mm");

      // Note: Insert the Date when someone update the row in the last coulmn
        lastCell.setValue(date);

      // Nota: Insert a comment in the lastCell with the user who modify that row
        lastCell.setComment(Session.getEffectiveUser());
    }

1 个答案:

答案 0 :(得分:3)

您可以使用下面的代码检查活动行和活动列,然后根据标识的行,列,您可以继续进行。

var activeCell = sheet.getActiveCell();
var row = activeCell.getRow();
var column = activeCell.getColumn();

你的整体代码看起来像这样。

function onEdit(event){
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  //Script Last Update Timming

  var actSht = event.source.getActiveSheet();
  var actRng = event.source.getActiveRange();

  var activeCell = actSht.getActiveCell();
  var row = activeCell.getRow();
  var column = activeCell.getColumn();

  if(row < 2)   return; //If header row then return
  var colNums  = [1, 5, 6, 7]; //Coulmns, whose edit is considered
  if(colNums.indexOf(column) == -1) return; //If column other than considered then return


  var index = actRng.getRowIndex();
  var dateCol = actSht.getLastColumn();
  var lastCell = actSht.getRange(index,dateCol);
  var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy HH:mm");

  // Note: Insert the Date when someone update the row in the last coulmn
  lastCell.setValue(date);

  // Nota: Insert a comment in the lastCell with the user who modify that row
  lastCell.setComment(Session.getEffectiveUser());
}