0

我一直在尝试将我的工作做几个星期,但我很茫然!我从修改这个脚本的过程中获得了很多帮助,但是它仍然会创建重复内容。从Google表格向Google日历创建活动 - 仍然存在重复问题

有没有人有任何想法可以帮助我?我失踪了吗?

当前脚本:

/** 
* 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 WHCs", 
    functionName : "exportWHCs" 
    }, 
       { 
    name : "Export Docs", 
    functionName : "exportDocs" 
    }]; 
    sheet.addMenu("Calendar Actions", entries); 
}; 

/** 
* Export events from spreadsheet to calendar 
*/ 
function exportWHCs() { 
    // 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('exportWHCs').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 = 4; // 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[12]); // First column 
    var title = row[18];   // Second column 
    var tstart = new Date(row[15]); 
    tstart.setDate(date.getDate()); 
    tstart.setMonth(date.getMonth()); 
    tstart.setYear(date.getYear()); 
    var tstop = new Date(row[16]); 
    tstop.setDate(date.getDate()); 
    tstop.setMonth(date.getMonth()); 
    tstop.setYear(date.getYear()); 
    var id = row[17];    // Sixth column == eventId 


    // Check if event already exists, delete it if it does 
try { 
    var event = cal.getEventSeriesById(id); 
    event.deleteEventSeries(); 
    row[17] = ''; // Remove event ID  
    } 
catch (e) { 
    // do nothing - we just want to avoid the exception when event doesn't exist 
} 
//cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00")); 
     var newEvent = cal.createEvent(title, tstart, tstop).addEmailReminder(5).getId(); 
row[17] = newEvent; // Update the data array with event ID 


    if(new Date().getTime()-startTime > 240000){ // if > 4 minutes 
     var processed = i+1;// save usefull variable 
     PropertiesService.getScriptProperties().setProperties({'itemsprocessed':processed}); 
     range.setValues(data); 
     return; 
    }  
    debugger; 
    } 
    // Record all event IDs to spreadsheet 
    range.setValues(data); 
} 




/** 
* Export events from spreadsheet to calendar 
*/ 
function exportDocs() { 
    // 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('exportDocs').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 = 4; // 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[13]); // First column 
    var title = row[19];   // Second column 
    var tstart = new Date(row[15]); 
    tstart.setDate(date.getDate()); 
    tstart.setMonth(date.getMonth()); 
    tstart.setYear(date.getYear()); 
    var tstop = new Date(row[16]); 
    tstop.setDate(date.getDate()); 
    tstop.setMonth(date.getMonth()); 
    tstop.setYear(date.getYear()); 
    var id = row[20];    // Sixth column == eventId 

    // Check if event already exists, delete it if it does 
try { 
    var event = cal.getEventSeriesById(id); 
    event.deleteEventSeries(); 
    row[20] = ''; // Remove event ID  
} 
catch (e) { 
    // do nothing - we just want to avoid the exception when event doesn't exist 
} 
//cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00")); 
     var newEvent = cal.createEvent(title, tstart, tstop).addEmailReminder(5).getId(); 
row[20] = newEvent; // Update the data array with event ID 


    if(new Date().getTime()-startTime > 240000){ // if > 4 minutes 
     var processed = i+1;// save usefull variable 
     PropertiesService.getScriptProperties().setProperties({'itemsprocessed':processed}); 
     range.setValues(data); 
     return; 
    }  
    debugger; 
    } 
    // Record all event IDs to spreadsheet 
    range.setValues(data); 
    } 

回答

0

我也试图重现您的问题。我能够创建一个新的事件而不复制事件。我用下面的代码尝试过。

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

/** 
* Export events from spreadsheet to calendar 
*/ 
function exportWHCs() { 

    if(PropertiesService.getScriptProperties().getKeys().length==0){ 
    PropertiesService.getScriptProperties().setProperties({'itemsprocessed':0}); 
    ScriptApp.newTrigger('exportWHCs').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 = 4; // Number of rows of header info (to skip) 
    var range = sheet.getDataRange(); 
    var data = range.getValues(); 
    var calId = "[email protected]"; 
    Logger.log(calId); 
    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]); 
    var title = row[18];   
    var tstart = new Date(row[15]); 
    tstart.setDate(date.getDate()); 
    tstart.setMonth(date.getMonth()); 
    tstart.setYear(date.getYear()); 
    var tstop = new Date(row[16]); 
    tstop.setDate(date.getDate()); 
    tstop.setMonth(date.getMonth()); 
    tstop.setYear(date.getYear()); 
    var id = row[17];    // Sixth column == eventId 


    // Check if event already exists, delete it if it does 
try { 
    var event = cal.getEventSeriesById(id); 
    event.deleteEventSeries(); 
    row[17] = ''; // Remove event ID  
    } 
catch (e) { 
    // do nothing - we just want to avoid the exception when event doesn't exist 
} 
     var newEvent = cal.createEvent(title, tstart, tstop).addEmailReminder(5).getId(); 
row[17] = newEvent; // Update the data array with event ID 


    if(new Date().getTime()-startTime > 240000){ // if > 4 minutes 
     var processed = i+1;// save usefull variable 
     PropertiesService.getScriptProperties().setProperties({'itemsprocessed':processed}); 
     range.setValues(data); 
     return; 
    }  
    } 
    // Record all event IDs to spreadsheet 
    range.setValues(data); 
} 

还要检查这个documentation有关访问活动形成默认日历提到的几点。

我没有得到删除现有事件并为相同值添加新事件的要点。

希望有帮助!

+0

感谢您的回答!我的日历不是该帐户的默认日历...可能是问题吗? – Ingrid 2014-11-26 15:23:15