создание базы данных из нескольких таблиц, которые постоянно обновляются - PullRequest
1 голос
/ 05 ноября 2019

У меня есть шаблон электронной таблицы, который содержит 3 листа для 3 типов задач, сделанных для клиента (давайте назовем листы «задача1», «задача2» и «задача3»).

  • Каждыйclient ("client1", "client2" ...) имеет свою собственную электронную таблицу, созданную из этого шаблона.
  • Каждый из листов для каждого клиента постоянно обновляется каждый раз, когда в новой строке создается новая задача,содержит подробности.
  • Могут быть добавлены новые клиенты (= новые электронные таблицы).

Я хотел бы создать «мастер документации задач» - базу данных, которая будет содержать3 листа («мастер задачи 1», «мастер задачи 2», «мастер задачи 3»), все строки из всех листов для всех клиентов.

  1. Как настроить динамическое сохранениеобновление со всеми данными во всех электронных таблицах (пустые строки не должны обновляться в базе данных)?
  2. Как определить диапазон синхронизации (например, только синхронизация для строки 4 и до столбца O)?

Спасибо!

1 Ответ

1 голос
/ 07 ноября 2019

Используя методы для службы электронных таблиц [1] и установив триггер onEdit для каждой из электронных таблиц клиентов [2], я выполнил требуемый процесс с помощью следующего кода:

function myFunction(e) {
  //Get edited client row and Sheet  
  var editedCell = e.range;
  var editedRow = editedCell.getRow();
  var clientSheet = editedCell.getSheet();

  //Number of headers on task sheet
  var noColumnHeaders = clientSheet.getRange("A4").getDataRegion(SpreadsheetApp.Dimension.COLUMNS).getValues()[0].length;
  //Entire row based on number of headers
  var completeRow = clientSheet.getRange(editedRow, 1, 1, noColumnHeaders).getValues();
  //Check if the row is completely filled 
  var isFilled = completeRow[0].indexOf("");

  if(isFilled == -1) {
    //Get master Spreadsheet
    var masterSpreadsheet = SpreadsheetApp.openById("[MASTER-SPREADSHEET-ID]");

    //Get master task sheet and set the values from client
    var masterSheet = masterSpreadsheet.getSheetByName(clientSheet.getSheetName() + " master");
    masterSheet.getRange(masterSheet.getLastRow()+1, 1, 1, noColumnHeaders).setValues(completeRow);
  }
}

function createSpreadsheetEditTrigger() {
  var clientSpreadsheet = SpreadsheetApp.openById("[CLIENT-SPREADSHEET-ID]");
  ScriptApp.newTrigger('myFunction')
  .forSpreadsheet(clientSpreadsheet)
  .onEdit()
  .create();
}

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

[1] https://developers.google.com/apps-script/reference/spreadsheet

[2] https://developers.google.com/apps-script/guides/triggers/installable#managing_triggers_manually

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