如何通过可更新的电子表格创建Google日历全天活动,而不创建重复项

我一直在使用Google Apps脚本和此question中的代码来创建可更新的日历事件(通过电子表格),而不创建重复事件。

/**
 * Adds a custom menu to the active spreadsheet,containing a single menu item
 * for invoking the exportEvents() function.
 * The onOpen() function,when defined,is automatically invoked whenever the
 * spreadsheet is opened.
 * For more information on using the Spreadsheet API,see
 * https://developers.google.com/apps-script/service_spreadsheet
 */
function onOpen() {
  var sheet = Spreadsheetapp.getactiveSpreadsheet();
  var entries = [{
    name : "Export Events",functionName : "exportEvents"
  }];
  sheet.addMenu("Calendar actions",entries);
};

/**
 * Export events from spreadsheet to calendar
 */
function exportEvents() {
  var sheet = Spreadsheetapp.getactiveSheet();
  var headerRows = 1;  // Number of rows of header info (to skip)
  var range = sheet.getDataRange();
  var data = range.getvalues();
  var calId = "YOUR_CALENDAR_ID";
  var cal = CalendarApp.getcalendarById(calId);
  for (i=0; i<data.length; i++) {
    if (i < headerRows) continue; // Skip header row(s)
    var row = data[i];
    var date = new Date(row[0]);  // First column
    var title = row[1];           // Second column
    var tstart = new Date(row[2]);
    tstart.setDate(date.getDate());
    tstart.setMonth(date.getMonth());
    tstart.setYear(date.getYear());
    var tstop = new Date(row[3]);
    tstop.setDate(date.getDate());
    tstop.setMonth(date.getMonth());
    tstop.setYear(date.getYear());
    var loc = row[4];
    var desc = row[5];
    var id = row[6];              // Sixth column == eventId
    // Check if event already exists,update it if it does
    try {
      var event = cal.getEventSeriesById(id);
    }
    catch (e) {
      // do nothing - we just want to avoid the exception when event doesn't exist
    }
    if (!event) {
      //cal.createEvent(title,new Date("March 3,2010 08:00:00"),2010 09:00:00"),{description:desc,location:loc});
      var newEvent = cal.createEvent(title,tstart,tstop,location:loc}).getId();
      row[6] = newEvent;  // Update the data array with event ID
    }
    else {
      event.setTitle(title);
      event.setDescription(desc);
      event.setLocation(loc);
      // event.setTime(tstart,tstop); // cannot setTime on eventSeries.
      // ... but we CAN set recurrence!
      var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
      event.setRecurrence(recurrence,tstop);
    }
    debugger;
  }
  // Record all event IDs to spreadsheet
  range.setvalues(data);
}

我可以使用它,但是现在我想创建一个全天活动,而不是一个具有开始和结束时间的活动。

我找到了全天活动here

的代码
    // Creates an all-day event for the moon landing and logs the ID.
var event = CalendarApp.getDefaultCalendar().createAllDayEvent('Apollo 11 Landing',new Date('July 20,1969'),{location: 'The Moon'});
Logger.log('Event ID: ' + event.getId());

我不知道如何将两者结合起来。任何帮助将不胜感激,在编码方面,我是菜鸟!

修改:修改后的代码

**
 * Adds a custom menu to the active spreadsheet,entries);
};

/**
 * Export events from spreadsheet to calendar
 */
function exportEvents() {
  var space = " - "
  var sheet = Spreadsheetapp.getactiveSheet();
  var headerRows = 1;  // Number of rows of header info (to skip)
  var range = sheet.getDataRange();
  var data = range.getvalues();
  var calId = "en0d0u4gismehh6qmkstskfavk@group.calendar.google.com";
  var cal = CalendarApp.getcalendarById(calId);
  for (i=0; i<data.length; i++) {
    if (i < headerRows) continue; // Skip header row(s)
    var row = data[i];
    var date = new Date(row[0]);  // First column
    var numb = row[3];
    var title = numb.substring(11,6) +space+ row[1];
    var loc = row[2];
    var id = row[4];              // Sixth column == eventId
    // Check if event already exists,location:loc});
      var newEvent = cal.createAllDayEvent(title,date,{location:loc}).getId();
      row[4] = newEvent;  // Update the data array with event ID
    }
    else {
      event.setTitle(title);
      event.setLocation(loc);
      // event.setTime(tstart,date);
    }
    debugger;
  }
  // Record all event IDs to spreadsheet
  range.setvalues(data);
}

如何通过可更新的电子表格创建Google日历全天活动,而不创建重复项

gaoshan254000 回答:如何通过可更新的电子表格创建Google日历全天活动,而不创建重复项

我认为应该采取一些措施:

function createAllDayEvents() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
  var vA=rg.getValues();
  var cal=CalendarApp.getCalendarById("cal id");
  vA.forEach(function(r,i){
    if(r[0]) {
      var date=new Date(r[0]);
      var title=r[1];
      var loc=r[2];
      var desc=r[3];
      var id=r[4];
      //if there is an id already there that means the event has already been created
      if(!id) {
        var event=cal.createAllDayEvent(title,date,{description:desc,location:loc});
        sh.getRange(i+2,5).setValue(event.getId());
      }
    }
  });  
}

这是我的电子表格的外观:

enter image description here

这将删除事件:

function deleteAllDayEvents() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getRange(2,sh.getLastColumn());
  var vA=rg.getValues();
  var cal=CalendarApp.getCalendarById("q289qp9augtnshkn70dkibcc54@group.calendar.google.com");
  vA.forEach(function(r,i){
    var id=r[4];
    if(id && r[5]) {
      cal.getEventById(id).deleteEvent();
      sh.getRange(i+2,5).setValue("");
      sh.getRange(i+2,6).setValue("FALSE");//just to reset the checkbox
    }
  })  
}

对电子表格稍作修改:

enter image description here

我刚刚在电子表格中添加了一列复选框

  

这对我来说似乎很好。

本文链接:https://www.f2er.com/3063185.html

大家都在问