@zimbura

Скрипт копирования данных Google Sheets с листа в одной книге в другую книгу, с проверкой данных на уникальность?

Есть
  1. книга "Исходники"
  2. id книги "Исходники" в гугл документах "2S7x6zcazUAOiUTZB1a53OnH58cIpOYChNV7diFugnNo"
  3. В книге "Исходники" с id "2S7x6zcazUAOiUTZB1a53OnH58cIpOYChNV7diFugnNo" есть листы названием "данные" и "данные2"
  4. На листах "данные" и "данные2" есть таблицы с с массивом данных в ячейках $A$2:$E или так A2:E


Для инфо
в первой строке A1:E1 название столбцов, таблицы в двух книгах одинаковые

Нужно
Скопировать-добавить данные и проверить их на уникальность на лету

  1. копируем данные в книгу "База"
  2. id книги "База" в гугл документах "2N7x6zcazUAOiUTZB1a53OnH58cIpOYChNV7diFugnNo"
  3. На лист "Сводные_данные" вниз таблицы в ячейках $A$2:$E или так A2:$E
Копируемые данные проверяются на уникальность по столбцу F на листе "Сводные_данные"
В столбец G добавляем дату и время копирования


Для проверки данных
Сцепляем столбцы A;B;C (при копирование в книгу "База" эти данные вставляем в столбец F
Пример: СЦЕПИТЬ(A3;B3;C3)

В книге "База" на лист "Сводные_данные" в столбце F для каждой строки уже есть сцепленные данные для проверки. Если дубликат для данных которые копируются из книги "Исходники" не найдены, добавляем новые данные вниз таблицы.
  • Вопрос задан
  • 1200 просмотров
Решения вопроса 1
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
Необходимо получить данные базы и построить индекс, по которому проверять наличие уникальных данных

function run() {
  const from = SpreadsheetApp.openById(
    '1DrMcZylPeacuZm7zTxRZmd3hcx1l0pKS2RjeqSphUeE'
  );
  const fromSheet = from.getSheetByName('Данные');
  const fromData = fromSheet.getDataRange().getValues().slice(1);
  const to = SpreadsheetApp.openById(
    '1LFgJE1cCRNM4PoVAWmZRPCm5BbdsAN5YkhgxC7okJc8'
  );
  const toSheet = to.getSheetByName('Сводные');
  const toDataIndex = toSheet
    .getDataRange()
    .getValues()
    .slice(1)
    .filter((row) => row[5] !== '')
    .map((row) => row[5]);
  const data = fromData.filter((row) => toDataIndex.indexOf(row[5]) === -1);
  if (data.length)
    toSheet
      .getRange(toSheet.getLastRow() + 1, 1, data.length, data[0].length)
      .setValues(data);
}


Пример в Таблице https://drive.google.com/drive/folders/1iar0CxtC57...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы