Я использую этот скрипт в листе 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)
}
}