Google Scripts - добавление нескольких гостей в событие календаря из одной ячейки в листе Google - PullRequest
0 голосов
/ 18 февраля 2020

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

Приведенный ниже код будет корректно работать, если только одна учетная запись находится в ячейке, но не в том случае, если в одной и той же ячейке указаны несколько учетных записей с запятыми.

Все идеи приветствуются.

Спасибо!

- Дрю

 function onOpen() {
 var s = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "Add Events to Google Calendar", functionName: "scheduleClass"}];
   s.addMenu("Google Calendar Functions", menuEntries);
 }

function scheduleClass(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var calendar = CalendarApp.getCalendarById("primary@group.calendar.google.com");

  var title = sheet.getRange('A2:A').getValues();
  var startTime = sheet.getRange('E2:E').getValues();
  var endTime = sheet.getRange('F2:F').getValues();
  var theDescription = sheet.getRange('G2:G').getValues();
  var theLocation = sheet.getRange('H2:H').getValues();
  var theGuests = sheet.getRange('K2:K').getValues();

  for(var i = 0; i < title.length+1; i++){
    if(title[i][0] != ""){
      calendar.createEvent(title[i][0], startTime[i][0], endTime[i][0]).addGuest(theGuests[i][0]).setLocation(theLocation[i][0]).setDescription(theDescription[i][0]);

    }
  }
}

function toString(value){
  var newString = "" + value;
  return newString;
}

1 Ответ

2 голосов
/ 18 февраля 2020
  • Вы хотите создать календарь событий с несколькими гостями.
    • В вашей ситуации значение столбца «K» равно sample1@gmail.com,sample2@gmail.com, которое разделено ,.
    • Значения столбцов «A», «E», «F» "," G "," H "и" K "в активном листе - это соответственно название, время начала, время окончания, описание, местоположение и гости.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точки модификации:

  • Когда гости разделены ,, вы можете получить каждое электронное письмо, используя split(). И их можно добавить с помощью addGuest(email).
  • . В вашем скрипте возникает ошибка при l oop на title.length+1 из for(var i = 0; i < title.length+1; i++){.
  • При извлечении значений из диапазон данных «A2: K #», стоимость процесса может быть уменьшена. Это было упомянуто комментарием Купера и обсуждениями.

Когда эти пункты отражены в вашем сценарии, это выглядит следующим образом.

Шаблон 1:

В этом шаблоне используется служба календаря CalendarApp. В этом случае scheduleClass() был изменен.

Модифицированный скрипт:

function scheduleClass(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var calendar = CalendarApp.getCalendarById("primary@group.calendar.google.com");
  var values = sheet.getRange(2, 1, sheet.getLastRow() - 1, 11).getValues();
  for(var i = 0; i < values.length; i++){
    var [title,,,,startTime,endTime,theDescription,theLocation,,,theGuests] = values[i];
    if(title != "") {
      var event = calendar.createEvent(title, startTime, endTime)
        .setLocation(theLocation)
        .setDescription(theDescription);
      theGuests.split(",").forEach(function(e) {event.addGuest(e.trim())});
    }
  }
}

Шаблон 2:

В этом шаблоне используется Calendar API.

Модифицированный скрипт:

При использовании этого скрипта пожалуйста, включите Calendar API в расширенных сервисах Google .

function scheduleClass(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var calendarId = "primary@group.calendar.google.com";
  var values = sheet.getRange(2, 1, sheet.getLastRow() - 1, 11).getValues();
  for(var i = 0; i < values.length; i++){
    var [title,,,,startTime,endTime,theDescription,theLocation,,,theGuests] = values[i];
    if(title != "") {
      var resource = {
        start: {dateTime: startTime.toISOString()},
        end: {dateTime: endTime.toISOString()},
        summary: title,
        description: theDescription,
        location: theLocation,
        attendees: theGuests.split(",").map(function(e) {return {email: e.trim()}})
      };
      Calendar.Events.insert(resource, calendarId);
    }
  }
}

Примечание:

  • Над обоими модифицированными сценариями одинаковые результаты.

Ссылки:

Если я неправильно понял ваш вопрос, и это не то направление, в котором вы хотите, я приношу свои извинения.

...