#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. Это исправлено. Сейчас я столкнулся с новой, не связанной ошибкой, но это устранило эту проблему. Большое спасибо!