Как перебрать идентификаторы событий в Google Sheets для получения идентификаторов вложений? - PullRequest
0 голосов
/ 21 декабря 2018

Используя следующий ответ, я обнаружил, как получить идентификатор вложения Календаря Google, используя идентификатор события со скриптом Google Apps и API Календаря.

У меня есть список идентификаторов событий календаря в столбце наэлектронная таблица, которую я собираюсь просмотреть и вернуть идентификатор вложения события в соседнем столбце (и пропустить все события, которые не имеют вложений).Может ли кто-нибудь оказать помощь?

Код, который дал мне код для получения 1 идентификатора вложения события за раз:

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

var inStorePartiesCalendarID = "### calendar ID ###";
var eventId = "### Event ID ###";
var res = Calendar.Events.get(inStorePartiesCalendarID, eventId, {fields: "attachments/fileId"});
var fileIds = res.attachments.map(function(e){return e.fileId});
Logger.log(fileIds)

Вопрос, который дал мне код для получения 1 идентификатора вложения события за раз: Как получить вложение события календаря Google с помощью приложенийСценарий

1 Ответ

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

Отправной точкой ОП был код, разработанный @Tanaike для Как получить вложение в событие календаря Google с помощью скрипта Apps .Результирующий код, показанный здесь, является расширением этого кода / логики для включения:

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

Возможно присоединить до 25 вложений к событию.Этот код является динамическим;он сообщит и отобразит столько вложений, сколько существует для любого заданного идентификатора события.

Примечание: идентификатор события представляет собой поле id, а НЕ iCalUID.

Кроме того, код полагается на включение Calendar API в разделе «Расширенные службы Google» (Меню редактора сценариев: Ресурсы> Расширенные службы Google), а также в «API Календаря Google» на «Панели инструментов API Google Cloud Platform».

Я оставил несколько операторов Logger в коде, если ОП пожелает / нужно идентифицировать ключевые значения на различных этапах функции.

function so53877465() {
  // setup the spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("testsheet");

  // get the number of EventIDs in Column A
  var Avals = ss.getRange("A1:A").getValues();
  var Alast = Avals.filter(String).length;
  //Logger.log("DEBUG: The last row on A = " + Alast);// DEBUG

  //Loop though each event ID
  for (var r = 1; r < Alast; r++) {
    // Logger.log("DEBUG: Aval row " + r + " = " + Avals[r][0]);//DEBUG

    // substitute your own Calendar ID
    var myCalendarID = "<<inset your Calendar ID>>";

    // get the eventID
    var eventId = Avals[r][0];

    // get the Even info
    var response = Calendar.Events.get(myCalendarID, eventId);

    // just focus on the attachments
    var events = response.attachments;

    // setup some variables
    var filecount = 0; //count the number of files in an event
    var filearray = []; // create an array for the file could and fileIDs

    // ccount the number of attachments for this eventID
    for (key in events) {
      filecount++;
    }
    //Logger.log("DEBUG: For row = " + r + ", the file count is " + filecount);//DEBUG

    // push the filecount onto the empty array
    filearray.push(filecount);

    // loop through the fileIDs
    for (i = 0; i < filecount; i++) {
      // Logger.log("DEBUG: i: " + i);// DEBUG

      // get the attachments
      var event = events[i];
      //get the file iD
      var myfileid = event.fileId;
      // Logger.log("DEBUG: The file id: " + myfileid);//DEBUG

      // push the fileid onto the array
      filearray.push(myfileid);
    }

    // adjust the array for 2d
    var values = [
      filearray
    ];

    // define the target range
    var range = sheet.getRange((r + 1), 2, 1, (filecount + 1)); //(row, column, numRows, numColumns)
    // Logger.log("DEBUG: the target range is " + range.getA1Notation());//DEBUG

    // update the target range with the array values.
    range.setValues(values);
  }
}

ДО1026 *
Data sheet - BEFORE


ПОСЛЕ
Data sheet - AFTER

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