Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script Google脚本:如何创建/更新/删除日历事件并防止重复_Google Apps Script_Google Spreadsheet Api - Fatal编程技术网

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

Google apps script Google脚本:如何创建/更新/删除日历事件并防止重复,google-apps-script,google-spreadsheet-api,Google Apps Script,Google Spreadsheet Api,数据: 第1行-有一些公式和格式 第2行-具有列名 A3=XXXXXX(主题) B3=呼叫客户(说明) C3=00:15:00(活动持续时间) F3=5/12/20013 18:41:00(开始日期) I3=5/12/2013 18:56:00(结束日期)(结束日期=F3+C3的总和) J3=事件ID(阅读其他主题时,为避免重复,需要使用ID标识每个事件。) H3=“是”(创建或更新事件)“删除”(删除事件) 上升或下降取决于一天,例如一天有20个,其他3个 所有活动都将从电子表格中创建和更

数据:

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

  • A3=XXXXXX(主题)
  • B3=呼叫客户(说明)
  • C3=00:15:00(活动持续时间)
  • F3=5/12/20013 18:41:00(开始日期)
  • I3=5/12/2013 18:56:00(结束日期)(结束日期=F3+C3的总和)
  • J3=事件ID(阅读其他主题时,为避免重复,需要使用ID标识每个事件。)
  • H3=“是”(创建或更新事件)“删除”(删除事件)
上升或下降取决于一天,例如一天有20个,其他3个

所有活动都将从电子表格中创建和更新,因为我们已经为其创建了专用日历

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

  • 我们希望为每行>3创建一个日历事件
  • 我们要防止重复
  • 如果H列中的内容为“是”,则应使用该行的新日期创建或更新事件脚本。如果说“Delete”,则只应删除与该行关联的EventID
重要提示:我们每15或30分钟更新一次开始和结束日期,因为我们管理关键事件

测试:
  • 我们尝试使用此答案中上载的脚本,但该函数仅适用于前两行
  • 当我们添加新主题并运行脚本时,脚本不会更新日历
  • 此外,如果第一个事件自动更新为最后一行的信息,我们也不会这样做
脚本(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);
    }
    }
    
    /**
    *将自定义菜单添加到活动电子表格,其中包含单个菜单项
    *用于调用exportEvents()函数。
    *定义onOpen()函数后,每当
    *电子表格已打开。
    *有关使用电子表格API的更多信息,请参见
    * https://developers.google.com/apps-script/service_spreadsheet
    */
    函数onOpen(){
    var sheet=SpreadsheetApp.getActiveSpreadsheet();
    变量项=[{
    名称:“导出事件”,
    函数名:“exportEvents”
    }];
    sheet.addMenu(“日历操作”,条目);
    };
    /**
    *将事件从电子表格导出到日历
    */
    函数exportEvents(){
    var sheet=SpreadsheetApp.getActiveSheet();
    如果(sheet.getName()=“Sheet1”){
    var activeCell=sheet.getActiveCell();//检测activeCell
    var row=activeCell.getRow();//检测ActiveRow
    var headerRows=2;//标题信息的行数(要跳过)
    var range=sheet.getDataRange();
    var data=range.getValues();
    var calId=”8au195cppi3smt6m138cgjpr3o@group.calendar.google.com";
    var cal=CalendarApp.getCalendarById(calId);
    对于(数据中的i){
    如果(i
尝试更改

data = range.getValues();

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

data = range.getDisplayValues();