Объединить несколько листов (динамически) в электронную таблицу Google Sheets - PullRequest
1 голос
/ 21 января 2020

У меня есть Google Spreadsheet с 3 листами, содержащими данные из разных стран (Country1, Country2, Country3) и 4-й лист (Summary), который должен объединить их вместе. Столбцы одинаковы на всех листах.

Я уже знаю, что могу объединить их так:

=QUERY({Country1!A2:G;Country2!A2:G;Country3!A2:G}; "SELECT * WHERE Col1 IS NOT NULL")

Однако мне нужен способ объединить произвольный количество листов вместе, без изменения формулы. Так что, если Country4 будет добавлено, это также должно быть добавлено. Как я могу это сделать?

Если это поможет, у меня есть лист Settings со столбцом, который содержит все названия стран (и, следовательно, названия страновых листов). У меня есть скрипт, который динамически генерирует новые листы, если страна добавлена ​​в лист Settings. При необходимости этот скрипт также может обновить формулу в листе Summary.

1 Ответ

2 голосов
/ 21 января 2020

Ответ:

Вы можете динамически создать формулу для этого, используя прилагаемый скрипт.

Код:

function generateFormula() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var formula = "=QUERY({";
  for (var i = 0; i < sheets.length; i++) {
    var name = sheets[i].getName();
    if (name != "Settings" && name != "Summary") {
      formula = formula + name + "!A2:G;";
    }
  }
  formula = formula.slice(0, -1) + '}, "SELECT * WHERE Col1 IS NOT NULL", 0)'
  ss.getSheetByName("Summary").getRange("A1").setFormula(formula);
}

Это просто один из возможных способов сделать это, хотя я не верю, что это возможно сделать произвольно без сценария. В любом случае, я надеюсь, что это полезно для вас!

Ссылки:

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