參考這個問題 -無法使用此腳本在日歷上創建事件
所有更改后的代碼:
function onOpen() {
SpreadsheetApp.getUi().createMenu('? M E N U ?')
.addItem('?? Set up ...', 'myTriggerSetup')
.addToUi();
}
function myTriggerSetup() {
var ssID = SpreadsheetApp.getActiveSpreadsheet().getId()
if (!isTrigger('onSpeEdit')) {
ScriptApp.newTrigger('onSpeEdit').forSpreadsheet(ssID).onEdit().create();
}
}
function isTrigger(funcName) {
var r = false;
if (funcName) {
var allTriggers = ScriptApp.getProjectTriggers();
var allHandlers = [];
for (var i = 0; i < allTriggers.length; i ) {
allHandlers.push(allTriggers[i].getHandlerFunction());
}
if (allHandlers.indexOf(funcName) > -1) {
r = true;
}
}
return r;
}
function onSpeEdit(e) {
var rg = e.range;
if (rg.getRow() == 57 && rg.isChecked() && rg.getSheet().getName() === "Course") {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(spreadsheet.getRange('U70').getValue()).getTime();
var end = new Date(spreadsheet.getRange('X69').getValue()).getTime();
var name = spreadsheet.getRange('U69').getValue()
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
rg.uncheck();
}
}
我的要求:
用戶將填寫所有 3 個單元格以獲取事件詳細資訊。然后,他們將在復選框上打勾,應該添加事件,并且復選框也應該取消選中。然后,另一個用戶將再次執行相同的程序。
我的問題:
它在虛擬表中作業,但不在主表中。我上面的代碼是根據主表。
虛擬表: https ://docs.google.com/spreadsheets/d/1_f_dujqIvmkXXLAqyandEmrWOxgskIfk9KTSKw28UuA/edit#gid=0
謝謝: 謝謝 Mike 和 Tanaike 為幫助我所做的驚人努力。
uj5u.com熱心網友回復:
嘗試這個
function onOpen() {
SpreadsheetApp.getUi().createMenu('? M E N U ?')
.addItem('?? Set up ...', 'myTriggerSetup')
.addToUi();
}
function myTriggerSetup() {
var ssID = SpreadsheetApp.getActiveSpreadsheet().getId()
if (!isTrigger('onSpeEdit')) {
ScriptApp.newTrigger('onSpeEdit').forSpreadsheet(ssID).onEdit().create();
}
}
function isTrigger(funcName) {
var r = false;
if (funcName) {
var allTriggers = ScriptApp.getProjectTriggers();
var allHandlers = [];
for (var i = 0; i < allTriggers.length; i ) {
allHandlers.push(allTriggers[i].getHandlerFunction());
}
if (allHandlers.indexOf(funcName) > -1) {
r = true;
}
}
return r;
}
function onSpeEdit(e) {
var rg = e.range;
if (rg.getRow() == 4 && rg.isChecked() && rg.getSheet().getName() === "Course") {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(rg.offset(-2,0).getValue()).getTime();
var end = new Date(rg.offset(-1,0).getValue()).getTime();
var name = rg.offset(-3,0).getValue();
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
rg.uncheck();
}
}
uj5u.com熱心網友回復:
1. 重命名您的函式名稱,如下所示。
在這種情況下,您還可以使用除onEdit. 關于這個的原因,你可以在這個執行緒中看到它。
function installedOnEdit(e){
var rg = e.range;
if(rg.getA1Notation() === "Z56" && rg.isChecked() && rg.getSheet().getName() === "Course"){
calendar(); //calling calendar function
rg.uncheck()
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course').getRange('X57').setValue('Event has been added to your Calendar')//Putting message in cell x57;
}
}
2. 將可安裝的 OnEdit 觸發器安裝到重命名的函式中。
您可以在官方檔案中查看如何手動安裝它。
如果您需要使用腳本,您也可以使用以下腳本。
function installTrigger() {
const ss = SpreadsheetApp.getActiveSpreadsheet()
ScriptApp.newTrigger("installedOnEdit").forSpreadsheet(ss).onEdit().create();
}
通過此流程,installedOnEdit由可安裝的 OnEdit 觸發器運行。當您使用它時,請選中復選框。通過這個,installedOnEdit運行和CalendarApp.getDefaultCalendar()運行。
筆記:
- 在這種情況下,它假設你的
calendar()和 if 陳述句onEdit作業正常。請注意這一點。
參考:
- 可安裝觸發器
添加:
我看到了您提供的示例電子表格。當我看到它時,“名稱”、“開始日期”、“結束日期”、“添加到日歷”的值是單元格“B1:B4”。但是在您的腳本中,沒有使用這些值。我認為你的新問題是由于這個。請使用您的示例電子表格修改您的腳本,如下所示。
修改后的腳本:
function calendar() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(spreadsheet.getRange('B2').getValue()).getTime();
var end = new Date(spreadsheet.getRange('B3').getValue()).getTime();
var name = spreadsheet.getRange('B1').getValue()
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
}
function installedOnEdit(e) {
var rg = e.range;
if (rg.getA1Notation() === "B4" && rg.isChecked() && rg.getSheet().getName() === "Course") {
calendar(); //calling calendar function
rg.uncheck();
}
}
function installTrigger() {
const ss = SpreadsheetApp.getActiveSpreadsheet()
ScriptApp.newTrigger("installedOnEdit").forSpreadsheet(ss).onEdit().create();
}
- 在這種情況下,當通過安裝可安裝的OnEdit觸發
installTrigger()時,當檢查單元格“B4”的復選框時,將創建事件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438811.html
