我一直在使用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);
}