Скрипт Google Apps для получения уникальных значений из всех листов в папке - PullRequest
0 голосов
/ 06 мая 2019

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

Пока что я нашел скрипт, который собирал все записи данных из файлов в указанной папке, но у меня недостаточно опыта работы с JS / Google Apps для реализации в коде эквивалента функции UNIQUE.

var spreadsheets = DriveApp.getFolderById("FOLDERID").getFilesByType(MimeType.GOOGLE_SHEETS);

  var data = [];
  while (spreadsheets.hasNext()) {
    var currentSpreadsheet = SpreadsheetApp.openById(spreadsheets.next().getId());
    data = data.concat(currentSpreadsheet.getSheetByName("Sheet1").getRange("RANGE").getValues());
  }

  SpreadsheetApp.
    getActiveSheet().
    getRange(1, 1, data.length, data[0].length).
    setValues(data);

Пример желаемой настройки:

Файл 1:

John Smith      EmailJS majorJS yearJS
James Johnson   EmailJJ majorJJ yearJJ
Monty Hall      EmailMH majorMH yearMH
Stephanie C.    emailSC majorSC yearSC
Martin R.       emailMR majorMR yearMR
Jack M.         emailJM majorJM yearJM

Файл 2:

asa sd      dgdsv   yurntb  eryb
sdads       svgsdvf bhg     tdbs
gdfgd       sfvgs   g       tbht
jfsfsds     sfvgsd  fb      thdbt
sgsgs       sawetv4 tbh     rtrb
qssqws      qedw    qwqd    qdqwd

Файл 3: (Дубликат файла 1)

John Smith      EmailJS majorJS yearJS
James Johnson   EmailJJ majorJJ yearJJ
Monty Hall      EmailMH majorMH yearMH
Stephanie C.    emailSC majorSC yearSC
Martin R.       emailMR majorMR yearMR
Jack M.         emailJM majorJM yearJM

Желаемый вывод:

Name            Email   Major   Year   Attendance
John Smith      EmailJS majorJS yearJS 2
James Johnson   EmailJJ majorJJ yearJJ 2
Monty Hall      EmailMH majorMH yearMH 2
Stephanie C.    emailSC majorSC yearSC 2
Martin R.       emailMR majorMR yearMR 2
Jack M.         emailJM majorJM yearJM 2
asa sd          dgdsv   yurntb  eryb   1
sdads           svgsdvf bhg     tdbs   1
gdfgd           sfvgs   g       tbht   1
jfsfsds         sfvgsd  fb      thdbt  1
sgsgs           sawetv4 tbh     rtrb   1
qssqws          qedw    qwqd    qdqwd  1

1 Ответ

0 голосов
/ 06 мая 2019

Я бы сделал это так:

  1. Инициализируйте пустой массив, чтобы сохранить его в качестве памяти ('memory').

Для каждой строки в каждом исходном листе выhave-

Сформировать массив ('item'), используя четыре поля;имя, адрес электронной почты, майор и год. Используйте метод 'memory' .includes ('item'), чтобы найти 'item' в 'memory' Если не найдено, напишите 'item'на листе назначения с посещаемостью «1» и вставьте «элемент» в массив памяти. Если «элемент» найден в «памяти», просто увеличьте посещаемость этого «элемента» влист назначения на 1. Вам не нужно вставлять его в массив 'memory' второй раз.

Я уверен, что есть более эффективные методы, чем этот.Но я верю, что это сработает.

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