我有一個電子表格來跟蹤每月的會員資格和付款。我在月底復制作業表,將其重命名為日期并將其鎖定以存檔。我有一個 Marco 記錄和設定來執行此操作,并且在作業表上有一個按鈕可以單擊以執行此操作。它作業得很好。
但是,我想讓這個腳本通過我在 google 腳本的 Tigger 區域設定的時間觸發。但是當它運行時,它失敗了,我收到以下錯誤:
例外:請先選擇一個活動作業表。在 ArchiveSheet(宏:5:15)
這是我的代碼:
function ArchiveSheet() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
spreadsheet.duplicateActiveSheet();
var sheetname = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MMM/yyyy");
spreadsheet.getActiveSheet().setName("Archive " sheetname);
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Current Month'), true);
spreadsheet.getRange('J3:J263').activate();
};
任何幫助,將不勝感激。
uj5u.com熱心網友回復:
getActiveSpreasheet() 只能用于有界腳本或更改、編輯和以編程方式創建的打開可安裝觸發器,在時間驅動觸發器上,您必須使用以下之一
open(file)(這應該與 DriveApp / Advanced Drive Service 一起使用openById(id)openByUrl(url)
有關的
- 時間驅動觸發器無法正常作業
uj5u.com熱心網友回復:
帶觸發器的作業表復制
function myfunk101() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet0');
sh.activate();
const nsh = ss.duplicateActiveSheet();
const n = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "HH:mm:ss");
nsh.setName("Archive " n);
};
活動表始終是 ss.getSheets()[0] 因此最好按名稱選擇。它不會激活當前會話上的作業表,因為它運行的實體僅在服務器上打開。
function createTriggerFormyfunk101() {
if (ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == 'myfunk101').length == 0) {
ScriptApp.newTrigger('myfunk101').timeBased().everyMinutes(5).create();//I used every five minutes because I didn't want to wait for the end of the month
}
}
我認為這是一個更好的方法:
function myfunk101() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");//Pick your sheet
ss.insertSheet(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "HH:mm:ss"), {template: sh});//change you time format for your name. Since I was running 5 minute triggers I wanted more precision.
};
- insertSheet(作業表名稱,選項)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/374847.html
