Ошибка типа: getCreators () не является функцией

#google-apps-script #google-sheets

#google-apps-script #google-sheets

Вопрос:

У меня есть скрипт, который просматривает каждый календарь, к которому у меня есть доступ, один за другим, и добавляет события в массив. Цель состоит в том, чтобы взять все события и поместить их в один и тот же набор столбцов, причем один из столбцов является именем создателя события. Я уверен, что здесь я что-то путаю простое, но в основном я копирую код из CloudBakers.com примерный лист здесь:https://www.cloudbakers.com/blog/export-google-calendar-entries-to-a-google-spreadsheet

Вот код, который у меня есть:

 function allCal(){
  var events = "";
  var ss = SpreadsheetApp.openById('1q5a29MtZz0zzQQ4F8hpsigkZGtCeK7qIh3tGLAZbgPg');
  var sheet = ss.getSheetByName('Calendars').activate();
  var today = new Date();
  var endDate = new Date(today.getTime()   (14 * 24 * 60 * 60 * 1000));
  var cals = CalendarApp.getAllCalendars();
  for (var i=0;i<cals.length;i  ){
    var cal = cals[i];
    var calId = cal.getId();
    events  = cal.getEvents(today, endDate);
  }
  for (var i=0;i<events.length;i  ) {
var row=i 1;
var details=[[calId,events[i].getCreators(), events[i].getTitle(), events[i].getLocation(), events[i].getStartTime()]];
var range=sheet.getRange(row,16,1,4);
range.setValues(details);
  }}
  

Ответ №1:

Прямо сейчас, events это не массив, это строка. Так events[i] ссылается на i-й символ этой строки, для которой не вызывается метод getCreators() .

Я предлагаю изменить объявление events на var events = []; и изменить строку, в которой вы добавляете события, на что-то более похожее events.push(cal.getEvents(today, endDate));

Обновить

При дальнейшей проверке я бы предположил, что getEvents() возвращает массив объектов. Если это так, вам нужно было бы изменить эту строку на что-то вроде этого.

 events.push(...cal.getEvents(today, endDate));
  

При этом используется оператор распространения (the ... ) для переноса каждого элемента возвращаемого массива в events массив. В качестве альтернативы вы могли бы использовать array.concat() , но этот способ кажется мне немного более идиоматичным.

Комментарии:

1. Я ценю комментарий. Я внес изменения, как было предложено, но я все еще получаю ту же ошибку.

2. Тогда я бы с подозрением относился к тому, что cal.getEvents() возвращается. Это может быть не объект, для которого есть getCreators() метод.

3. У меня возникла мысль, и я обновил свое решение, чтобы объяснить.

4. Это исправлено. Сейчас я столкнулся с новой, не связанной ошибкой, но это устранило эту проблему. Большое спасибо!