Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 从工作表更新Google日历事件_Google Apps Script_Google Sheets_Google Api_Calendar_Google Spreadsheet Api - Fatal编程技术网

Google apps script 从工作表更新Google日历事件

Google apps script 从工作表更新Google日历事件,google-apps-script,google-sheets,google-api,calendar,google-spreadsheet-api,Google Apps Script,Google Sheets,Google Api,Calendar,Google Spreadsheet Api,我正在尝试将谷歌日历同步到一个工作表,以便能够轻松地从工作表中批量更新日历事件,然后将所有更改推回到日历中 我可以将所有事件下载到我的工作表中,具体使用以下代码: // Loop through all calendar events found and write them out starting on calulated ROW 2 (i+2) for (var i=0;i<events.length;i++) { var row=i+2; var myformula_pla

我正在尝试将谷歌日历同步到一个工作表,以便能够轻松地从工作表中批量更新日历事件,然后将所有更改推回到日历中

我可以将所有事件下载到我的工作表中,具体使用以下代码:

    // Loop through all calendar events found and write them out starting on calulated ROW 2 (i+2)
for (var i=0;i<events.length;i++) {
var row=i+2;
var myformula_placeholder = '';
// Matching the "header=" entry above, this is the detailed row entry "details=", and must match the number of entries of the GetRange entry below
// NOTE: I've had problems with the getVisibility for some older events not having a value, so I've had do add in some NULL text to make sure it does not error
var details=[[events[i].getTitle(), events[i].getStartTime(), events[i].getEndTime(), events[i].getId()]];
var range=sheet.getRange(row,1,1,4);
range.setValues(details);
但是,因为它正在创建一个新事件,而不是简单地更新原始事件,所以每次我推送脚本时,它都会创建重复的事件

我希望找到使用第一个函数中收集的事件ID并用新信息更新现有事件的代码


我不希望使用删除所有日历事件然后创建所有新事件的代码。

可以使用
getEventSeriesById()
方法。尽管名称表明此方法用于获取系列日历事件,但它适用于单个事件

文件规定:

获取具有给定ID的事件系列。如果给定的ID用于单个CalendarEvent,则CalendarEventSeries将与该系列中的单个事件一起返回

请注意,上面的代码假定日历事件ID位于F列,下载日历数据的函数将ID置于F列

     function caltest1() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 2;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, numRows, 5);
  var data = dataRange.getValues();
  var cal = CalendarApp.getDefaultCalendar();
  for (i in data) {
    var row = data[i];
    var title = row[0];  // First column
    var desc = row[1];       // Second column
    var tstart = row[2];
    var tstop = row[3];
    var loc = row[4];
    //cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc});
    cal.createEvent(title, tstart, tstop, {description:desc,location:loc});
 }
}
function caltest1() {
  var cal,desc,i,iCalId,loc,row,sheet,startRow,thisEvent,title,tstart,
      tstop,;

  sheet = SpreadsheetApp.getActiveSheet();
  startRow = 2;  // First row of data to process
  var numRows = 2;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, numRows, 5);
  var data = dataRange.getValues();

  cal = CalendarApp.getDefaultCalendar();

  for (i in data) {
    row = data[i];
    title = row[0];  // First column
    desc = row[1];       // Second column
    tstart = row[2];
    tstop = row[3];
    loc = row[4];
    iCalId = row[5];//Column 6 or F

    //cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc});
    //cal.createEvent(title, tstart, tstop, {description:desc,location:loc});

    thisEvent = cal.getEventSeriesById(iCalId);//Get a calendar event by it's ID

    if (thisEvent) {
      thisEvent.setDescription('Test it to determine if it works');//Edit the description
    }
 }
}