运行时驱动的备份脚本,但只需一次

时间:2017-09-14 13:45:33

标签: google-apps-script

我有一个归档脚本,现在正常工作(我已将其包含在下面)。但是我希望它只能在工作表使用之日的凌晨1点运行。我制作工作表并提前几个月命名,他们坐在驱动器中直到使用当天(如果我们预订,可能会更早)但我不希望他们每天凌晨2点运行脚本和存档!有没有办法让时间驱动的触发器只有一次?当我复制空白页时,时间驱动的触发器不会复制。任何想法或更好的自动化方法?感谢。

  function dataBackup() {
  var inputSS = SpreadsheetApp.getActiveSpreadsheet();
  var archiveSS = 
 SpreadsheetApp.openById('146WU8RghfFqlCpCSX7n6kBAKOyxcpVKt14yhVfvYz-g');
  var user = Session.getActiveUser().getEmail();
  var sheetNames = ['AM trip', 'PM trip', 'Pool / Beach', 'Night Dive'];
  for (var i = 0; i < sheetNames.length; i++) {

    var inputSheet = inputSS.getSheetByName(sheetNames[i]);
    var archiveSheet = archiveSS.getSheetByName(sheetNames[i]);

    var date = inputSheet.getRange('A2').getValue(); // Changed to stop 
  inadvertent cell changes, also made text white so not seen.
    var data = 
 inputSheet.getRange('E7:U37').getValues().filter(function(row) { return 
 row[0] !== '' || row[1] !== ''});

    for (var x = 0; x < data.length; x++) {
        data[x].splice(0, 0, date);
    }
    var getDate = archiveSheet.getRange(archiveSheet.getLastRow(), 
 1).getValue();
    var maxRowLength = data.reduce(function(length, row) { return 
 Math.max(length, row.length); }, 0);
    var date = new Date(date); 
    var getDate = new Date(getDate);
    if (getDate.getDate() != date.getDate() || getDate.getMonth() != 
date.getMonth()) {     

        if (data.length != 0) {
            archiveSheet.insertRowsAfter(archiveSheet.getLastRow(), 
data.length);
            archiveSheet.getRange(archiveSheet.getLastRow() + 1, 1, 
data.length, maxRowLength).setValues(data);
        } else {
            archiveSheet.insertRowsAfter(archiveSheet.getLastRow(), 1);
            archiveSheet.getRange(archiveSheet.getLastRow() + 1, 1, 1, 
 2).setValues([[date, 'No Data']]);
        }
    }

}
}

1 个答案:

答案 0 :(得分:0)

将您的触发器设置为每月一次?例如。每周或确定日期?

由于谷歌提供服务的方式,因此复制的触发器不会被取消。设置它们并不需要很长时间。