Google apps script 从谷歌电子表格中创建谷歌日历事件的谷歌脚本-“;超过最大执行时间“;
使用这个很棒的答案,我成功地修改了它,创建了一个脚本,将事件从谷歌电子表格导出到谷歌日历 然后,我得到了一些很好的建议,并发现它没有填充eventID列,这是因为我遇到了一个错误——“超过了最大执行时间”——因为行数太多(多达1000行) 我一直在寻找答案,试图找到一个解决这个问题的方法,但似乎无法找到答案!抱歉,我对这一切都很陌生 有没有人能给我指出正确的方向,告诉我如何强制脚本在5分钟后处理,或者做其他事情Google apps script 从谷歌电子表格中创建谷歌日历事件的谷歌脚本-“;超过最大执行时间“;,google-apps-script,google-calendar-api,execution-time,Google Apps Script,Google Calendar Api,Execution Time,使用这个很棒的答案,我成功地修改了它,创建了一个脚本,将事件从谷歌电子表格导出到谷歌日历 然后,我得到了一些很好的建议,并发现它没有填充eventID列,这是因为我遇到了一个错误——“超过了最大执行时间”——因为行数太多(多达1000行) 我一直在寻找答案,试图找到一个解决这个问题的方法,但似乎无法找到答案!抱歉,我对这一切都很陌生 有没有人能给我指出正确的方向,告诉我如何强制脚本在5分钟后处理,或者做其他事情 function onOpen() { var sheet = Spread
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 = 2; // Number of rows of header info (to skip)
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "pma5g2rd5cft4lird345j7pke8@group.calendar.google.com";// use default claendar for tests
var cal = CalendarApp.getCalendarById(calId);
for (i in data) {
if (i < headerRows) continue; // Skip header row(s)
var row = data[i];
var date = new Date(row[12]); // WHC
var title = row[18]; // WHC Title
var tstart = setTimeToDate(date,row[15]);// start time
var tstop = setTimeToDate(date,row[16]);// end time
Logger.log('date = '+date+'tstart = '+tstart+' tstop = '+tstop);
var id = row[17]; //EventID WHC
// Check if event already exists, update it if it does
try {
var event = cal.getEventSeriesById(id);
event.setTitle('got you');// this is to "force error" if the event does not exist, il will never show for real ;-)
}catch(e){
var newEvent = cal.createEvent(title, tstart, tstop); // create a "normal" event
row[17] = newEvent.getId(); // Update the data array with event ID
Logger.log('event created');// while debugging
var event = cal.getEventSeriesById(row[17]);// make it an event Serie
}
event.setTitle(title);
}
// Record all event IDs to spreadsheet
range.setValues(data);
}
function setTimeToDate(date,time){
var t = new Date(time);
var hour = t.getHours();
var min = t.getMinutes();
var sec = t.getSeconds();
var dateMod = new Date(date.setHours(hour,min,sec,0))
return dateMod;
}
函数onOpen(){
var sheet=SpreadsheetApp.getActiveSpreadsheet();
变量项=[{
名称:“导出事件”,
函数名:“exportEvents”
}];
sheet.addMenu(“日历操作”,条目);
};
/**
*将事件从电子表格导出到日历
*/
函数exportEvents(){
var sheet=SpreadsheetApp.getActiveSheet();
var headerRows=2;//标题信息的行数(要跳过)
var range=sheet.getDataRange();
var data=range.getValues();
var calId=”pma5g2rd5cft4lird345j7pke8@group.calendar.google.com“;//对测试使用默认claendar
var cal=CalendarApp.getCalendarById(calId);
对于(数据中的i){
如果(ifunction createEventsWithBatch() {
// check if the script runs for the first time or not,
// if so, create the trigger and PropertiesService.getScriptProperties() the script will use
// a start index and a total counter for processed items
// else continue the task
if(PropertiesService.getScriptProperties().getKeys().length==0){
PropertiesService.getScriptProperties().setProperties({'itemsprocessed':0});
ScriptApp.newTrigger('createEventsWithBatch').timeBased().everyMinutes(5).create();
}
// initialize all variables when we start a new task, "notFinished" is the main loop condition
var itemsProcessed = Number(PropertiesService.getScriptProperties().getProperty('itemsprocessed'));
var startTime = new Date().getTime();
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 = "h22nevo15tm0nojb6ul4hu7ft8@group.calendar.google.com";
var cal = CalendarApp.getCalendarById(calId);
for (var i = itemsProcessed ; 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 = setTimeToDate(date,row[2]);
var tstop = setTimeToDate(date,row[3]);
// Logger.log('date = '+date+'tstart = '+tstart+' tstop = '+tstop);
var loc = row[4];
var desc = row[5];
var type = row[6];
var times = row[7]
var id = row[8];
// Check if event already exists, update it if it does
try {
var event = cal.getEventSeriesById(id);
event.setTitle('got you');
}catch(e){
var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc});
row[8] = newEvent.getId(); // Update the data array with event ID
// Logger.log('event created');
var event = cal.getEventSeriesById(row[8]);
}
event.setTitle(title);
event.setDescription(desc);
event.setLocation(loc);
if(type=='PM'){
var recurrence = CalendarApp.newRecurrence().addMonthlyRule().times(times);
event.setRecurrence(recurrence, tstart, tstop);
}else if(type=='PW'){
var recurrence = CalendarApp.newRecurrence().addWeeklyRule().times(times)
event.setRecurrence(recurrence, tstart, tstop);
}
data[i] = row ;
Logger.log(i+' '+new Date().getTime()-startTime)
if(new Date().getTime()-startTime > 240000){ // if > 4 minutes
var processed = i+1;// save usefull variable
PropertiesService.getScriptProperties().setProperties({'itemsprocessed':processed});
range.setValues(data);
MailApp.sendEmail(Session.getEffectiveUser().getEmail(),'progress sheet to cal','item processed : '+processed);
return;
}
}
range.setValues(data);// this time we are done !
killTrigger();// delete the trigger
PropertiesService.getScriptProperties().deleteAllProperties(); // clean up properties
}
function setTimeToDate(date,time){
var t = new Date(time);
var hour = t.getHours();
var min = t.getMinutes();
var sec = t.getSeconds();
var dateMod = new Date(date.setHours(hour,min,sec,0))
return dateMod;
}
function killTrigger(){
var trigger = ScriptApp.getProjectTriggers()[0];
ScriptApp.deleteTrigger(trigger);
}
函数createEventsWithBatch(){
//检查脚本是否第一次运行,
//如果是,请创建脚本将使用的触发器和PropertiesService.getScriptProperties()
//已处理项目的开始索引和总计计数器
//否则继续任务
如果(PropertiesService.getScriptProperties().getKeys().length==0){
PropertiesService.getScriptProperties().setProperties({'itemsprocessed':0});
ScriptApp.newTrigger('createEventsWithBatch').timeBased().everyMinutes(5.create();
}
//初始化所有变量当我们开始一个新任务时,“notFinished”是主循环条件
var itemsProcessed=Number(PropertiesService.getScriptProperties().getProperty('itemsProcessed');
var startTime=new Date().getTime();
var sheet=SpreadsheetApp.getActiveSheet();
var headerRows=1;//标题信息的行数(要跳过)
var range=sheet.getDataRange();
var data=range.getValues();
var calId=”h22nevo15tm0nojb6ul4hu7ft8@group.calendar.google.com";
var cal=CalendarApp.getCalendarById(calId);
for(var i=itemsProcessed;i240000){//if>4分钟
变量过程