Google脚本:非活动工作表的onEdit吗?

时间:2019-03-21 18:05:46

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

在sheet1上有一个提交按钮,该按钮运行脚本并将数据移到sheet2中。

我正在为移动“打上时间戳”(在某些情况下为防止覆盖,并且没有意义的时间戳),但是使用当前脚本是这样的

问题(1):仅当我在sheet2上手动进行编辑(= sheet2处于活动状态)时,才会进行onEdit。

已解决! (请参阅评论)问题(2):onEdit不会仅限于sheet2,并且也会在sheet1上发生。

function onEdit() {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
    if( sheet.getName() == "sheet2" ) {
        var activecell = sheet.getActiveCell();
        if( activecell.getColumn() == 2 ) {
            var pastecell = activecell.offset(0, -1);
            if( pastecell.getValue() === '' & activecell.getValue() != '' )
                pastecell.setValue(new Date()).setNumberFormat('YY-MM-DD HH:mm:ss');
        }
    }
}

有人知道两个可以解决这个问题吗?

非常感谢您的帮助和见解!

1 个答案:

答案 0 :(得分:0)

因此,在阅读了以下内容的‍♀️和@tehhowch洞察力之后,

https://developers.google.com/apps-script/guides/triggers/

  

脚本执行和API请求不会导致触发器运行。对于   例如,调用Range.setValue()编辑单元格不会导致   电子表格的onEdit触发器即可运行。

只需在原始移动功能中运行时间戳即可解决,

function move() {

  var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
  var source_range = source.getRange(3, 15, 1, 6).getValues();

  var target = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
  var target_range = target.getRange(target.getLastRow() + 1, 2, 1, 6);

  target_range.setValues(source_range);

  var datecell = target_range.offset(0, -1, 1, 1);

  datecell.setValue(new Date()).setNumberFormat('YY-MM-DD HH:mm:ss');

  var clearsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
  clearsheet.getRange("J3:K4").clearContent();
  clearsheet.getRange("B8:B25").clearContent();
  clearsheet.getRange("H8:H9").clearContent();
  clearsheet.getRange("H11").clearContent();
  clearsheet.getRange("O7:P16").clearContent();

}

有时候,您必须大声思考。希望这对其他人有帮助。