Как изменить мой сценарий так, чтобы он повторял несколько календарей вместо одного - PullRequest
0 голосов
/ 27 января 2019

Я использую этот скрипт в листе Google для поиска в названном календаре событий, в которых в названии упоминается конкретное имя клиента (в основном это отслеживание дат проекта). Это нормально для меня, чтобы искать по одному календарю, но я хотел бы найти группу календарей сразу и получить все события от них, а затем распечатать все результаты на листе Google. Я чувствую, что это тривиально, но я не знаю, как правильно перебрать массив с помощью функции getEvent

Редактировать: мне удалось это выяснить, и приведенный ниже скрипт весьма полезен для поиска во многих календарях, чтобы найти все события, в которых строка соответствует этому событию. Сценарий запускается из пункта меню, добавленного к пользовательскому интерфейсу листов, и отображается всплывающее окно для передачи пользователю строки поиска. Поиск проверяет весь объект события на наличие строки, и вы можете передать совпадение, множественное совпадение, отрицание и т. Д.

Вот рабочий код:

// add menu option for 
function onOpen () {
var ui = SpreadsheetApp.getUi()
ui.createMenu('Custom Actions')
  .addItem('New Calendar Search', 'main')
  .addToUi()
}

function main(){
var sheet = SpreadsheetApp.getActiveSheet();
sheet.clearContents();
var header = [["Calendar Address", "Event Title", "Event Location", "Event Start", "Event End"]]
var range = sheet.getRange(1,1,1,5);
range.setValues(header);
// var mycals is an array of google calendar id's; for gsuite, this is the email address of the user which calendar you will be viewing.
var mycals = ['email1@myemail.com','email2@myemail.com','email3@myemail.com']

var ui = SpreadsheetApp.getUi()
var response = ui.prompt('Enter your search string:')
var custname = response.getResponseText()
for (var j=0;j<mycals.length;j++) {
  var cal = CalendarApp.getCalendarById(mycals[j]);
  // error handling in case you don't have access to any specified calendar
  if (!cal) { continue; }
  var events = cal.getEvents(new Date("January 1, 2018 00:00:00 EST"), new Date("December 31, 2018 23:59:59 EST"), {search: custname});
  for (var i=0;i<events.length;i++) {
    var row = sheet.getLastRow() + 1
    var details=[[events[i].getOriginalCalendarId(),events[i].getTitle(), events[i].getLocation(), events[i].getStartTime(), events[i].getEndTime()]];
    var range=sheet.getRange(row,1,1,5);
    range.setValues(details);
  }
sheet.sort(4)
}
}

1 Ответ

0 голосов
/ 27 января 2019

Я просто получаю сообщение об ошибке "TypeError: Невозможно вызвать метод" getEvents "с нулевым значением (строка 8, файл" Код ")", независимо от того, как я возиться с этим кодом.

Вместо

var mycal = "my.email@myworkdomain.com";
var cal = CalendarApp.getCalendarById(mycal);

try

var cal = CalendarApp.defaulCalendar();

ПРИМЕЧАНИЯ. Невозможно использовать CalendarApp.getCalendarById(Id) для доступа к календарю по умолчанию других пользователей, если онине поделился им с действующим пользователем.

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...