Google 将事件更新到 Google 日历时出现脚本问题(尽量不要重复)
Google Script problem while updating events to Google Calendar (trying not to make duplicates)
Google Apps 脚本有点新。我正在尝试从 GoogleSheet 创建 Google 日历事件。它不会透露我正在使用某人的答案,其中一些答案来自 Whosebug。不幸的是,我还没有找到问题的完整答案。或者如果有我无法重新创建它:)
GoogleSheet
这就是我正在使用的 Google Sheet(试图制作一个运输日历,以便有人可以跟踪交货情况)。标记为 0 的列不用于制作日历事件,只有标记为 1 的列。例如日历事件中应该包含的内容:
标题:L-H-19/22/描述:Driver1 手机:1234567890/日期:2022-05 -16
注意:日期可能会更改为 start/end 带小时的日期。 (2022-05-16 06:00 - 2022-5-16 07:00)。另外,我提到了我没有使用的“描述”,但我会试一试,同时我将“.createAllDayEvent”更改为“.createEvent”,这就是为什么还有评论“DATA_2”。
现在,它创建了一个事件,但我不知道如何在不重复的情况下更新它。尝试使用 .deleteEventSeries() 并更新它,还尝试使用触发器 onEdit() 但仍然没有成功。
这是我用来向日历添加事件的代码:
function initMenu() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('SPEDYCJA')
menu.addItem('DODAJ DO KALENDARZA','DodanieSpedycjiDoKalendarza')
menu.addItem('AKTUALIZUJ KALENDARZ','AktualizacjaWydarzenia')
menu.addToUi();
}
function onOpen() {
initMenu();
}
function DodanieSpedycjiDoKalendarza() {
var ui = SpreadsheetApp.getUi();
var WcisnietyPrzycisk = ui.alert("Czy na pewno chcesz uruchomić skrypt??",ui.ButtonSet.YES_NO);
if (WcisnietyPrzycisk == ui.Button.YES) {
let AktywnyArkusz = SpreadsheetApp.getActiveSheet();
let KalendarzSpedycja = CalendarApp.getCalendarById("cbvdt6iek0qbgujgbhq68et950@group.calendar.google.com");
let TabelaDanych = AktywnyArkusz.getRange(12,8,8,9).getValues();
for (let x=0; x<TabelaDanych.length; x++) {
const ZMIANA = TabelaDanych[x];
const TYTUŁ = ZMIANA[0];
const DATA_1 = ZMIANA[7];
//const DATA_2 = ZMIANA[14];
const ID_Wydarzenia = ZMIANA[8];
if (ID_Wydarzenia == "") {
const NoweWydarzenie = KalendarzSpedycja.createAllDayEvent(TYTUŁ,DATA_1);
const ID_NoweWydarzenie = NoweWydarzenie.getId();
AktywnyArkusz.getRange(8+x,8).setValue(ID_NoweWydarzenie);
}
try {
var event = KalendarzSpedycja.getEventSeriesById(ID_Wydarzenia);
event.deleteEventSeries();
//entry[9] = '';
} catch(e) {
//nie rób nic
}
var newEvent = KalendarzSpedycja.createAllDayEvent(TYTUŁ,DATA_1);
// entry[9] = newEvent;
debugger;
}
ui.alert("Dodano spedycje do kalendarza!")
} else if (WcisnietyPrzycisk == ui.Button.NO) {
ui.alert("Nie uruchomiłeś skryptu.");
}
}
此外,示例代码中我尝试使用触发器 onEdit() 而在主函数中我没有使用“try { .deleteEventSeries() }”,只有循环但仍然失败..
function AktualizacjaWydarzenia(e) {
var ZaktualizowaneWiersze = e.range.getRange();
var ZaktualizowaneDane = e.source.getActiveSheet().getRange(ZaktualizowaneWiersze, 8, 8, 9).getValues()[4];
var ID_ZaktualizowaneWydarzenie = ZaktualizowaneDane[9]
try {
var Wydarzenie = CalendarApp.getEventById(ID_ZaktualizowaneWydarzenie);
ID_ZaktualizowaneWydarzenie.setTitle(ZaktualizowaneDane[1]);
ID_ZaktualizowaneWydarzenie.setDate(ZaktualizowaneDane[8]);
} catch(err) {
console.log("Wystąpił błąd podczas aktualizowania wydarzeń do kalendarza. Konkretne wydarzenie może jeszcze nie istnieć.");
}
}
我将非常感激有人会用代码粘贴答案并在现有答案中指出 me/critique 我做错了什么。
谢谢,祝你有个愉快的一天。
为了防止重复,
您需要在创建该事件时将事件 ID 保存在一列中。然后,如果你想更新,你必须考虑这个id。
参考
尝试
function AktualizacjaWydarzenia(ID_Wydarzenia,TYTUŁ,DATA_1,DATA_2) {
var Wydarzenie = CalendarApp.getEventById(ID_ZaktualizowaneWydarzenie);
Wydarzenie.getEventById(ID_Wydarzenia).setTitle(TYTUŁ)
Wydarzenie.getEventById(ID_Wydarzenia).setTime(DATA_1,DATA_2)
}
Google Apps 脚本有点新。我正在尝试从 GoogleSheet 创建 Google 日历事件。它不会透露我正在使用某人的答案,其中一些答案来自 Whosebug。不幸的是,我还没有找到问题的完整答案。或者如果有我无法重新创建它:)
GoogleSheet
这就是我正在使用的 Google Sheet(试图制作一个运输日历,以便有人可以跟踪交货情况)。标记为 0 的列不用于制作日历事件,只有标记为 1 的列。例如日历事件中应该包含的内容: 标题:L-H-19/22/描述:Driver1 手机:1234567890/日期:2022-05 -16
注意:日期可能会更改为 start/end 带小时的日期。 (2022-05-16 06:00 - 2022-5-16 07:00)。另外,我提到了我没有使用的“描述”,但我会试一试,同时我将“.createAllDayEvent”更改为“.createEvent”,这就是为什么还有评论“DATA_2”。
现在,它创建了一个事件,但我不知道如何在不重复的情况下更新它。尝试使用 .deleteEventSeries() 并更新它,还尝试使用触发器 onEdit() 但仍然没有成功。
这是我用来向日历添加事件的代码:
function initMenu() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('SPEDYCJA')
menu.addItem('DODAJ DO KALENDARZA','DodanieSpedycjiDoKalendarza')
menu.addItem('AKTUALIZUJ KALENDARZ','AktualizacjaWydarzenia')
menu.addToUi();
}
function onOpen() {
initMenu();
}
function DodanieSpedycjiDoKalendarza() {
var ui = SpreadsheetApp.getUi();
var WcisnietyPrzycisk = ui.alert("Czy na pewno chcesz uruchomić skrypt??",ui.ButtonSet.YES_NO);
if (WcisnietyPrzycisk == ui.Button.YES) {
let AktywnyArkusz = SpreadsheetApp.getActiveSheet();
let KalendarzSpedycja = CalendarApp.getCalendarById("cbvdt6iek0qbgujgbhq68et950@group.calendar.google.com");
let TabelaDanych = AktywnyArkusz.getRange(12,8,8,9).getValues();
for (let x=0; x<TabelaDanych.length; x++) {
const ZMIANA = TabelaDanych[x];
const TYTUŁ = ZMIANA[0];
const DATA_1 = ZMIANA[7];
//const DATA_2 = ZMIANA[14];
const ID_Wydarzenia = ZMIANA[8];
if (ID_Wydarzenia == "") {
const NoweWydarzenie = KalendarzSpedycja.createAllDayEvent(TYTUŁ,DATA_1);
const ID_NoweWydarzenie = NoweWydarzenie.getId();
AktywnyArkusz.getRange(8+x,8).setValue(ID_NoweWydarzenie);
}
try {
var event = KalendarzSpedycja.getEventSeriesById(ID_Wydarzenia);
event.deleteEventSeries();
//entry[9] = '';
} catch(e) {
//nie rób nic
}
var newEvent = KalendarzSpedycja.createAllDayEvent(TYTUŁ,DATA_1);
// entry[9] = newEvent;
debugger;
}
ui.alert("Dodano spedycje do kalendarza!")
} else if (WcisnietyPrzycisk == ui.Button.NO) {
ui.alert("Nie uruchomiłeś skryptu.");
}
}
此外,示例代码中我尝试使用触发器 onEdit() 而在主函数中我没有使用“try { .deleteEventSeries() }”,只有循环但仍然失败..
function AktualizacjaWydarzenia(e) {
var ZaktualizowaneWiersze = e.range.getRange();
var ZaktualizowaneDane = e.source.getActiveSheet().getRange(ZaktualizowaneWiersze, 8, 8, 9).getValues()[4];
var ID_ZaktualizowaneWydarzenie = ZaktualizowaneDane[9]
try {
var Wydarzenie = CalendarApp.getEventById(ID_ZaktualizowaneWydarzenie);
ID_ZaktualizowaneWydarzenie.setTitle(ZaktualizowaneDane[1]);
ID_ZaktualizowaneWydarzenie.setDate(ZaktualizowaneDane[8]);
} catch(err) {
console.log("Wystąpił błąd podczas aktualizowania wydarzeń do kalendarza. Konkretne wydarzenie może jeszcze nie istnieć.");
}
}
我将非常感激有人会用代码粘贴答案并在现有答案中指出 me/critique 我做错了什么。
谢谢,祝你有个愉快的一天。
为了防止重复,
您需要在创建该事件时将事件 ID 保存在一列中。然后,如果你想更新,你必须考虑这个id。
参考
尝试
function AktualizacjaWydarzenia(ID_Wydarzenia,TYTUŁ,DATA_1,DATA_2) {
var Wydarzenie = CalendarApp.getEventById(ID_ZaktualizowaneWydarzenie);
Wydarzenie.getEventById(ID_Wydarzenia).setTitle(TYTUŁ)
Wydarzenie.getEventById(ID_Wydarzenia).setTime(DATA_1,DATA_2)
}