1

因此,基于大量的互联网侦察工作,我设法拼凑了一个使用Google表格创建全天日历条目的脚本。我希望为其创建事件的内容总共约有450行,但每次运行脚本时,它都永远不会结束,并且它永远不会创建EventId(解决重复内容),相反,它为我提供了一个“超出最大执行时间“错误。谷歌脚本“超出最大执行时间”/ Google Cal脚本

$ function onOpen() { 
var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
var entries = [{ 
name : "Export Events", 
functionName : "exportEvents" 
}]; 
sheet.addMenu("Calendar Actions", entries); 
}; 

function exportEvents() { 
var sheet = SpreadsheetApp.getActiveSheet(); 
var headerRows = 0; // Number of rows of header info (to skip) 
var range = sheet.getDataRange(); 
var data = range.getValues(); 
var calId = "[email protected]"; 
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[0]); // First column 
var title = row[1];   // Second column 
var id = row[3];    // 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) { 
    var newEvent = cal.createAllDayEvent(title, date).getId(); 
    row[3] = newEvent; // Update the data array with event ID 
} 
else { 
    event.setTitle(title); 
range.setValues(data); 
} 
debugger; 
} 


} 

我的问题是:

  • 我怎样才能避免这个错误?如果我将这些数据分成几个表单,这些工作是否可行?
  • 对于我的生活,我无法得到eventiD部分填充...我设法在测试表上做到这一点,但我不能再做了...任何帮助将是太棒了!

为了参考我的片被设置为 日期/标题/ EVENTID

THANKS !!!!

回答

1

首先在你的代码的一些错误...

  1. 您更新行[3],但忘了更新其相应的行值数据,我只使用数据作为变量简化。
  2. 您使用row[3]第三塔,它是row[2](现data[i][2]
  3. 你在错误的地方在循环更新表

工作代码如下(我改变了CAL ID一我自己的测试目的...当然还原你的)

至于时间限制,你应该继续有限的批次事件,看看执行成绩单,看看需要多长时间1和乘。 ..要获得远低于5分钟的值,这是Google Script中的最长执行时间。 然后,您应该保持行索引(i)的值,并使用时间触发器继续下一批从该索引开始。

documentation on trigger创建将帮助您,而the scriptProperties是将索引值保留在键/值架构中的理想位置。另请参阅doc。

如果您遇到问题,请不要犹豫,再回来一个新问题。

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 = "[email protected]"; 
    var cal = CalendarApp.getCalendarById(calId); 
    for (i in data) { 
    if (i < headerRows) continue; // Skip header row(s) 
    var date = new Date(data[i][0]); // First column 
    var title = data[i][1];   // Second column 
    var id = data[i][2];    // third 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) { 
     Logger.log(event); 
     var newEvent = cal.createAllDayEvent(title, date); 
     data[i][2] = newEvent.getId(); // Update the data array with event ID 
    } 
    else { 
     event.setTitle(title); 
    } 
    } 
    Logger.log(data); 
    sheet.getRange(1,1,data.length,data[0].length).setValues(data); 

} 
相关问题