簡體   English   中英

試圖讓谷歌表格中的標題和日期自動與谷歌日歷同步

[英]Trying to have title and dates in google sheets automatically sync up with a Google calendar

我設法得到了一些工作,它將獲取標題和日期並將其放入 Google 日歷,但我必須每次都運行腳本。 但是,當我更改事件的日期(日期總是在變化)時,它只會制作另一個事件並保留舊事件。

我只想有一個帶有標題和日期的谷歌表,以便將事情發生的時間同步到谷歌日歷,當日期發生變化時,它會修改一個事件而不制作新的事件。 理想情況下,也不必每次都運行腳本。

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var calendarId = "test calendar";
  var eventCal = CalendarApp.getCalendarById(calendarId);
  var schedule = spreadsheet.getRange("A4:B6").getValues();

  for (x=0; x<schedule.length; x++) {
    var shifts = schedule[x];
    var Eventnames = shifts[0];
    var DateofEvent = shifts[1];

    eventCal.createAllDayEvent(Eventnames, DateofEvent);
  }
}

以下是完成此操作的步驟

  1. 為 Calendar_Event_ID 創建一個列(在此示例中為列 C)
  2. 運行此代碼為您的所有事件創建日歷事件(與您的代碼相同,修改后將日歷事件 ID 保存在 Calendar_Event_ID 列中)。 您最終將得到如下數據結構:
一個 C
事件名稱1 事件日期1 事件 ID1
事件名稱2 事件日期2 事件 ID2
function myFunction() {
  var calendarEventIdColumn = 3 // put the number of your column choice here (C = 3)
  var dataStartRow = 4 // you started at A4 in your example, so I am starting with row 4
  var calendarEventIds = []; // this will store a list of calendar event IDs
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var calendarId = "test calendar";
  var eventCal = CalendarApp.getCalendarById(calendarId);
  var schedule = spreadsheet.getRange("A4:C6").getValues(); // added column C to include the calendar event ids

  for (var x=0; x < schedule.length; x++) {
    var shifts = schedule[x];
    var Eventnames = shifts[0];
    var DateofEvent = shifts[1];
    var eventId = shifts[2];
    var event;
    // if the event already exists, edit it. Otherwise create a new one.
    if (eventId !== '') {
      event = eventCal.getEventById(eventId);
      event.setTitle(Eventnames);
      event.setAllDayDate(DateofEvent);
    } else {
      event = eventCal.createAllDayEvent(Eventnames, DateofEvent);  
    }
    calendarEventIds.push([event.getId()]); // add the event id to list of event ids 
  }
  // save the new calendar event IDs under the calendarEventIdColumn
  spreadsheet.getRange(dataStartRow, calendarEventIdColumn, calendarEventIds.length, 1).setValues(calendarEventIds);
}
  1. 每次編輯事件的日期或名稱時重新運行myFunction 請注意,您可以通過在應用程序腳本代碼編輯器中運行 function、創建自定義菜單項或使用編輯觸發器來“手動”執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM