Google脚本:如何创建/更新/删除日历事件并防止重复

时间:2013-12-05 22:41:36

标签: google-apps-script google-spreadsheet-api

数据:

第1行 - 有一些公式和格式
第2行 - 列名称为

  • A3 = XXXXXX (Subjet)
  • B3 =致电客户(说明)
  • C3 = 00:15:00 (活动持续时间)
  • F3 = 5/12/20013 18:41:00 (StartDate)
  • I3 = 5/12/2013 18:56:00 (EndDate)(EndDate =来自F3 + C3的总和)
  • J3 = EventID (如果要阅读其他主题以避免重复,则需要使用ID识别每个事件。)
  • H3 =“是”(创建或更新事件)“删除”(删除事件)

该装置将根据当天的增加或减少,例如,一天许多将有20和其他3。

所有活动都将创建&从电子表格更新,因为我们为它创建了一个独家日历。

情况:

  

我们每天都有很多电话,而且非常考虑使用日历创建活动。   这就是为什么我们有一个电子表格,当我们修改B列时,所有信息都会自动更新。

  • 我们想为每一行创建一个日历事件> 3
  • 我们希望防止重复
  • 如果在列H中内容为“是”,则脚本应为“创建”或“使用该行的新日期更新事件”。如果说“删除”应该只删除与该行关联的EventID。

重要提示:我们更新了开始和放大每15或30分钟结束一次,因为我们管理重大事件。

测试:

  • 我们尝试使用此答案Here中上传的脚本,但该功能仅适用于前两行。
  • 当我们添加新主题并运行脚本时,脚本不会更新日历。
  • 如果第一个事件使用最后一行的信息自动更新,我们也不会这样做。

SCRIPT(1):

  • 此脚本删除&每次活动时重新创建。我希望更新现有事件(如果存在)或创建它不存在。
  • 此脚本针对工作表中的每一行运行。我只想为修改过的行运行。
  • 未检查列H

    /**
     * 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();
      if (sheet.getName() == "Sheet1"){
        var activeCell = sheet.getActiveCell(); //Detec the ActiveCell
        var row = activeCell.getRow(); //Detect the ActiveRow
        var headerRows = 2;  // Number of rows of header info (to skip)
      var range = sheet.getDataRange();
      var data = range.getValues();
      var calId = "8au195cppi3smt6m138cgjpr3o@group.calendar.google.com";
      var cal = CalendarApp.getCalendarById(calId);
      for (i in data) {
        if (i < headerRows) continue; // Skip header row(s)
        var row = data[i];
        var title = row[0];           // [0] First column// [1] Second column
        var tstart = row [5];
        var tstop = row [8];
        var desc = row[1];
        var id = row[9];              // Nine column == eventId
    // Check if event already exists, delete it if it does
    try {
      var event = cal.getEventSeriesById(id);
      event.deleteEventSeries();
      row[9] = '';  // 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"), {description:desc,location:loc});
    var newEvent = cal.createEvent(title, tstart, tstop, {description:desc}).getId();
    row[9] = newEvent;  // Update the data array with event ID
    debugger;  }
      // Record all event IDs to spreadsheet
      range.setValues(data);
    }
    }
    

1 个答案:

答案 0 :(得分:0)

尝试改变

data = range.getValues();

data = range.getDisplayValues();

据我所知,getDisplayValues 将检索单元格的字符串值