Получить список гостей из календаря - Google Apps Script (GAS) - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь выяснить, как получить и сообщить подробности событий календаря, включая всех гостей и их адреса электронной почты.

Я также пробовал это и получал только один адрес электронной почты (иногда):

function getEmailsFromArray(guestsArray){
var guestEmails = [];
for (var i=0;i<guestsArray.length;i++) {
  guestEmails.push(guestsArray[i].getEmail());
}
return guestEmails; }

Вот код, который я сейчас использую.Помогите!

function export_gsheet(){

var mycal = "myemailaddress@mine.com";
var cal = CalendarApp.getCalendarById(mycal);

var events = cal.getEvents(new Date("May 02, 2019 00:00:00 PST"), new Date("May 03, 2019 00:00:00 PST"));

var sheet = SpreadsheetApp.getActiveSheet();

var header = [["Calendar Address", "Event Title", "Event Description", "Calculated Duration", "Attendees", "Email", "MyStatus", "Created By", "All Day Event", "Recurring Event", "Event Location", "Event Start", "Event End", "Visibility", "Date Created", "Last Updated"]]
var range = sheet.getRange(2,1,1,16);
range.setValues(header);


for (var i=0;i<events.length;i++) {
var row=i+3;
var myformula_placeholder = '';

  var guestList=events[i].getGuestList();   //GET THE EMAIL AND STATUS OF EACH GUEST FOR EACH EVENT 
  for(var d=0; guestList!=null && d<guestList.length; d++)
    {
      var details=[[mycal,events[i].getTitle(), events[i].getDescription(), myformula_placeholder, guestList[d].getName(), guestList[d].getEmail(), events[i].getMyStatus(), events[i].getCreators(), events[i].isAllDayEvent(), events[i].isRecurringEvent(), events[i].getLocation(), events[i].getStartTime(), events[i].getEndTime(), ('' + events[i].getVisibility()), events[i].getDateCreated(), events[i].getLastUpdated()]];
      var range=sheet.getRange(row,1,1,16);
      Logger.log(details);

        var range2 = sheet.getRange(row+d,1,1,16);
        range2.setValues(details);

    }
    row=row+d; // increment row to start the next output after the previous output
}
}

Код в основном работает, но я не получаю полный список гостей для событий, и иногда вместо этого я получаю имя конференц-зала и адрес календаря.

Я также не получаю все события в конкретный день, если список гостей велик для определенного события.

1 Ответ

0 голосов
/ 06 июня 2019

Проблема со значением "row", потому что он не повторяется так, как вы хотите.Потому что каждый раз, когда внутренний для финиша, значение «строки» снова устанавливается в 3.Кроме того, во 2-й итерации внутреннего for значение «d» снова равно 0, поэтому не следует ставить значение «row» в зависимость от значения «d».Я исправил, и это работало для меня со всеми событиями дня, как это:

var row=3;
for (var i=0;i<events.length;i++) {

var myformula_placeholder = '';

  var guestList=events[i].getGuestList();   //GET THE EMAIL AND STATUS OF EACH GUEST FOR EACH EVENT 
  for(var d=0; guestList!=null && d<guestList.length; d++)
    {      
      var details=[[mycal,events[i].getTitle(), events[i].getDescription(), myformula_placeholder, guestList[d].getName(), guestList[d].getEmail(), events[i].getMyStatus(), events[i].getCreators(), events[i].isAllDayEvent(), events[i].isRecurringEvent(), events[i].getLocation(), events[i].getStartTime(), events[i].getEndTime(), ('' + events[i].getVisibility()), events[i].getDateCreated(), events[i].getLastUpdated()]];
      var range=sheet.getRange(row,1,1,16);
      Logger.log(details);

        var range2 = sheet.getRange(row,1,1,16);
        range2.setValues(details);
        row++; // increment row to start the next output after the previous output
    }   
}
}

Единственные изменения - это "row = 3", для которого я вывел его за пределы внешнего и включил ряд= row + d "с просто" row ++ "(и помещая его во внутреннюю часть для).

О других проблемах:

1) Ресурсы (конференц-залы) рассматриваются как еще один гость, так что если вы не хотите, чтобы это произошло, вы можете использовать «Если» с адресом электронной почты ресурса в условии, чтобы избежать этого (их адреса заканчиваются на @ resource.calendar.google.com).

2) Проверьте, используете ли вы точный часовой пояс, который вы хотите, в этом случае вы используете время PST, поэтому календарь должен быть также во времени PST.(или просто не устанавливайте часовой пояс, и он займет тот же часовой пояс сценария, который, как я полагаю, совпадает с календарем).

Редактировать

Также вы можете проверить дополнительную информацию о каждом госте, посмотрите документацию здесь: https://developers.google.com/apps-script/reference/calendar/event-guest

Если вы хотите, чтобы владелец также был в списке гостей, вы должны использовать getGuestList(true) с логическим значением внутри.Документация: https://developers.google.com/apps-script/reference/calendar/calendar-event#getguestlist

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

...