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。

参考

setTime(startTime, endTime)

尝试

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)
}