如何将 Google Meet 和 Google Meet 直播网址导出到 Google 表格?

问题描述

因此,我正在开发一个 App Script 模板,该模板允许您查找 Google 日历并将其导出到 Google 电子表格,以便进一步报告或处理(托管于 https://www.cloudbakers.com/blog/export-google-calendar-entries-to-a-google-spreadsheet)。我在我的副本中运行得很好,但我想将 Google Meet 视频会议和 Google Meet Livestream 的网址添加到为每个日历事件输出的列中。在我的公司,这些通常被列为 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 脚本菜鸟,因此在尝试自行解决此问题时并没有取得多大成功。

解决方法

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

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


先决条件:Enable advanced services

enter image description here

enter image description here


示例代码:

  // 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,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,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。

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

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

输出:

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...