>

아래 코드를 사용하면 매일 오후 7시에 스프레드 시트를 복사 (백업) 할 수 있습니다. 그러나 아침에 폴더를 체크인하면 약 20 개의 사본이 있습니다. 사본을 1 개만 만들고 싶습니다.

어떻게 변경할 수 있나요?

아래 코드를 참조하십시오.

도움을 주셔서 감사합니다.

// 18 April 2018
// Google Apps Script to make copies of Google Sheet in specified destination folder
var RUNLOOP = true;
function createTriggers() {
    var days = [ScriptApp.WeekDay.MONDAY, ScriptApp.WeekDay.TUESDAY,
               ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY,                                            
               ScriptApp.WeekDay.FRIDAY];
    for (var i=0; i<days.length; i++) {
      ScriptApp.newTrigger("makeCopy")
               .timeBased().onWeekDay(days[i])
               .atHour(19).create();
      killTrigger();// delete the trigger
   }
}

function makeCopy() {
  for (i=0; i<1; i++){ //to make only one copy
// generates the timestamp and stores in variable formattedDate as year-month-date 
var formattedDate = Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "dd-MM-yyyy' 'HH:mm:ss");
// gets the name of the original file and appends the word "copy" followed by the timestamp stored in formattedDate
var name = SpreadsheetApp.getActiveSpreadsheet().getName() + " Backup " + formattedDate;
// gets the destination folder by their ID. with your folder's ID that you can get by opening the folder in Google Drive and checking the URL in the browser's address bar
var destination = DriveApp.getFolderById("1NMA8nNIr2ZLZKm1PkKolORhyjLk3xKdx");
// gets the current Google Sheet file
var file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId())
// makes copy of "file" with "name" at the "destination"
file.makeCopy(name, destination);
  }
}
function killTrigger(){
  var trigger = ScriptApp.getProjectTriggers()[0];
  ScriptApp.deleteTrigger(trigger);
}


  • 답변 # 1

    삭제하지 않고 트리거를 다시 생성하는 것처럼 보입니다.

    요구 사항을 달성하기위한 코드는 다음과 같습니다.

    var RUNLOOP = true;
    function createTriggers() {
        killTrigger();  // Delete any previous triggers.
        var days = [ScriptApp.WeekDay.MONDAY, ScriptApp.WeekDay.TUESDAY,
                   ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY,                                            
                   ScriptApp.WeekDay.FRIDAY];
        for (var i=0; i<days.length; i++) {
          ScriptApp.newTrigger("makeCopy")
                   .timeBased().onWeekDay(days[i])
                   .atHour(19).create();
       }  
    }
    
    function makeCopy() {  
    // generates the timestamp and stores in variable formattedDate as year-month-date 
    var formattedDate = Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "dd-MM-yyyy' 'HH:mm:ss");
    // gets the name of the original file and appends the word "copy" followed by the timestamp stored in formattedDate
    var name = SpreadsheetApp.getActiveSpreadsheet().getName() + " Backup " + formattedDate;
    // gets the destination folder by their ID. with your folder's ID that you can get by opening the folder in Google Drive and checking the URL in the browser's address bar
    var destination = DriveApp.getFolderById("xxxyyy-zzz");
    // gets the current Google Sheet file
    var file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId())
    // makes copy of "file" with "name" at the "destination"
    file.makeCopy(name, destination);  
    }
    function killTrigger(){
      var triggers = ScriptApp.getProjectTriggers();  
      for (var i = 0; i < triggers.length; i++) {
        ScriptApp.deleteTrigger(triggers[i]);
      } 
    }
    
    

    처음 실행 killTrigger()  기능을 한 번 수행하면 이전 트리거가 모두 삭제됩니다. 이제 createTriggers() 를 실행하십시오.  한 번만 방법. 그러면 5 개의 트리거가 생성됩니다 (매주 1 회). 그것은 19Hours에 실행하고 makeCopy() 를 호출  방법. 그게 전부입니다.

  • 답변 # 2

    이 문제에 대해 조사했습니다 .Google 앱 스크립트 자체에서 트리거 함수를 호출하여 해당 함수에 대해 원하는대로 트리거를 설정할 필요가 없습니다. 아래 예제는 다음과 같습니다. ->현재 트리거 --->트리거 설정->그러면 스크린 샷 아래에 표시됩니다

관련 자료

  • 이전 java - ajax post에서 servlet으로 jsp로 리디렉션하려면 어떻게합니까?
  • 다음 jquery 또는 ajax없이 일반 자바 스크립트를 사용하여 PHP 값을 모달로 전달