So I'm working off an App Script template that allows you to find and export your Google Calendar for a range of dates to a Google Spreadsheet for further reporting or processing (hosted at https://www.cloudbakers.com/blog/export-google-calendar-entries-to-a-google-spreadsheet). I have it running just fine in my copy, but I want to add the urls for both the Google Meet video conference and the Google Meet Livestream to the columns that are output for each calendar event. At my company these would typically be listed as the first and last values in conferenceData.entryPoints[].uri . I tried:
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]];
and get "TypeError: Cannot read property "entryPoints" from undefined". Re-running with just events[i].conferenceData at the end, indeed just prints "undefined" in my new column in my sheet.
Any ideas on what I'm missing here? I'm an Apps Scripts noob so not having much success at all trying to troubleshoot this on my own.
When you use CalendarApp.getEvents(startTime, endTime, options) to get all the events within the given time range, It will return an array of CalendarEvent object. CalendarEvent object doesn't have conferenceData
method. You can check the list of available CalendarEvent methods on the reference link provided.
There is no CalendarEvent method you can use to obtain the Google Meet and Google Live Stream URLs. You need to use Advanced Calendar Service to obtain this URLs.
// 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');
}
header
variabledetails
variableNote that the iCalUID and the event id used by the Calendar v3 API and Calendar advanced service are not identical and cannot be used interchangebly
conferenceData
(if available)conferenceData
exist, update the details
variable based on the entryPoints[]
parameter.