【问题标题】:How to export Google Meet and Google Meet live stream urls to Google sheet?如何将 Google Meet 和 Google Meet 直播网址导出到 Google 表格?
【发布时间】:2021-03-18 16:44:42
【问题描述】:

因此,我正在开发一个 App Script 模板,该模板可让您查找 Google 日历的一系列日期并将其导出到 Google 电子表格,以便进一步报告或处理(托管在 https://www.cloudbakers.com/blog/export-google-calendar-entries-to-a-google-spreadsheet)。我的副本中运行得很好,但我想将 Google Meet 视频会议和 Google Meet Livestream 的 URL 添加到每个日历事件输出的列中。在我的公司,这些通常被列为 ConferenceData.entryPoints[].uri 中的第一个和最后一个值。我试过了:

var details=[[mycal,events[i].getTitle(), events[i].getDescription(), events[i].getLocation(), events[i].getStartTime(), events[i].getEndTime(), myformula_placeholder, ('' + events[i].getVisibility()), events[i].getDateCreated(), events[i].getLastUpdated(), events[i].getMyStatus(), events[i].getCreators(), events[i].isAllDayEvent(), events[i].isRecurringEvent(), events[i].conferenceData.entryPoints.uri]];

并得到“TypeError:无法从未定义中读取属性“entryPoints””。最后只使用 events[i].conferenceData 重新运行,实际上只是在工作表的新列中打印“未定义”。

关于我在这里缺少什么的任何想法?我是一个 Apps Scripts 菜鸟,所以尝试自己解决这个问题并没有取得太大的成功。

【问题讨论】:

    标签: google-apps-script google-sheets google-calendar-api google-meet


    【解决方案1】:

    当你使用CalendarApp.getEvents(startTime, endTime, options)获取给定时间范围内的所有事件时,它会返回一个CalendarEvent对象的数组。 CalendarEvent 对象没有 conferenceData 方法。您可以在提供的参考链接上查看可用的 CalendarEvent 方法列表。

    没有可用于获取 Google Meet 和 Google Live Stream URL 的 CalendarEvent 方法。您需要使用Advanced Calendar Service 获取此网址。


    先决条件:Enable advanced services


    示例代码:

      // Create a header record on the current spreadsheet in cells A1:N1 - Match the number of entries in the "header=" to the last parameter
      // of the getRange entry below
      var header = [["Calendar Address", "Event Title", "Event Description", "Event Location", "Event Start", "Event End", "Calculated Duration", "Visibility", "Date Created", "Last Updated", "MyStatus", "Created By", "All Day Event", "Recurring Event", "Meet Link", "Live Stream"]]
      var range = sheet.getRange(1,1,1,16);
      range.setValues(header);
    
        
      // Loop through all calendar events found and write them out starting on calulated ROW 2 (i+2)
      for (var i=0;i<events.length;i++) {
        var row=i+2;
        var myformula_placeholder = '';
        // Matching the "header=" entry above, this is the detailed row entry "details=", and must match the number of entries of the GetRange entry below
        // NOTE: I've had problems with the getVisibility for some older events not having a value, so I've had do add in some NULL text to make sure it does not error
    
        var details=[[mycal,events[i].getTitle(), events[i].getDescription(), events[i].getLocation(), events[i].getStartTime(), events[i].getEndTime(), myformula_placeholder, ('' + events[i].getVisibility()), events[i].getDateCreated(), events[i].getLastUpdated(), events[i].getMyStatus(), events[i].getCreators(), events[i].isAllDayEvent(), events[i].isRecurringEvent(), "None", "None"]];
        
        //Add Meet link
        var eventId = events[i].getId().replace("@google.com","");
        var currentEvent = Calendar.Events.get(mycal,eventId);
        if(currentEvent.conferenceData != null){
          //Update Meet link
          details[0][14] = currentEvent.conferenceData.entryPoints[0].uri;
    
          //Update Live Stream
          if(currentEvent.conferenceData.entryPoints.length > 1){
            details[0][15] = currentEvent.conferenceData.entryPoints[currentEvent.conferenceData.entryPoints.length - 1].uri;
          }
        }
        var range=sheet.getRange(row,1,1,16);
        range.setValues(details);
    
        // Writing formulas from scripts requires that you write the formulas separate from non-formulas
        // Write the formula out for this specific row in column 7 to match the position of the field myformula_placeholder from above: foumula over columns F-E for time calc
        var cell=sheet.getRange(row,7);
        cell.setFormula('=(HOUR(F' +row+ ')+(MINUTE(F' +row+ ')/60))-(HOUR(E' +row+ ')+(MINUTE(E' +row+ ')/60))');
        cell.setNumberFormat('.00');
    
      }
    

    它有什么作用?

    1. 在您的 header 变量中添加额外的工作表标题(“Meet Link”和“Live Stream”)
    2. 在您的 details 变量中添加额外的默认值,用于见面链接和直播链接
    3. 从事件的 iCalUID 中获取日历事件 ID。 CalendarEvent.getId() 返回事件的 iCalUID。我们只需要删除 iCalUID 中的“@google.com”即可获取事件 ID。

    请注意,Calendar v3 API 和 Calendar 高级服务使用的 iCalUID 和事件 ID 不相同,不能互换使用

    1. 使用Calendar.Events.get(calendarId: string, eventId: string) 获取包含conferenceDataevent resource(如果可用)
    2. 检查conferenceData是否存在,根据entryPoints[]参数更新details变量。
    3. 将活动详情写入活动工作表

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多