Получить несколько листов по имени в Google Sheets

Вопрос или проблема

Я хотел бы, чтобы эта функция применялась к нескольким листам:

Как вы можете видеть, я получаю имя листа 2024, я хотел бы обновить это по мере необходимости, например, 2022, 2023, 2024, 2025, 2026 и так далее. Я уверен, что это очень просто, но я совсем новичок в кодировании для Google Sheets. Это изменённый фрагмент данного скрипта: https://gist.github.com/mikebranski/285b60aa5ec3da8638e5

  var required_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("2024");
  var range = required_sheet.getDataRange();

  // Затем, если есть какие-либо строки заголовков, сдвинем наш диапазон, чтобы удалить их 
  // оттуда; в противном случае они также будут отсортированы.
  if (NUMBER_OF_HEADER_ROWS > 0) {
    // Устанавливая второй параметр offset() в 0, мы предотвращаем 
    // сдвиг любых столбцов. Заметьте, что строковые заголовки 
    // здесь не имели бы смысла, но именно здесь вы можете 
    // изменить это, если захотите, чтобы они также поддерживались.
    range = range.offset(NUMBER_OF_HEADER_ROWS, 0);
  }

  // Выполняем собственно сортировку.
  range.sort([ {
    column: SORT_COLUMN_INDEX_1,
    ascending: ASCENDING
  },
  {column: SORT_COLUMN_INDEX_2,
    ascending: ASCENDING} ]);
}

Ответ или решение

Чтобы получить данные из нескольких листов по именам в Google Sheets, вы можете немного модифицировать представленный вами код. Вместо того чтобы жестко задавать имя листа (например, "2024"), можно использовать массив имен листов и пройтись по каждому имени в цикле.

Вот пример кода, который решает вашу задачу:

function sortMultipleSheets() {
  // Задайте массив имен листов, которые вы хотите обработать
  var sheetNames = ["2022", "2023", "2024", "2025", "2026"];
  var NUMBER_OF_HEADER_ROWS = 1; // Укажите количество строк заголовков
  var SORT_COLUMN_INDEX_1 = 1;    // Укажите индекс первого столбца сортировки (начиная с 1)
  var SORT_COLUMN_INDEX_2 = 2;    // Укажите индекс второго столбца сортировки (начиная с 1)
  var ASCENDING = true;            // Установите true для сортировки по возрастанию

  // Получаем активную таблицу
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  // Проходим по каждому имени листа в массиве
  sheetNames.forEach(function(sheetName) {
    var requiredSheet = spreadsheet.getSheetByName(sheetName);

    // Если лист существует, выполняем сортировку
    if (requiredSheet) {
      var range = requiredSheet.getDataRange();

      // Если есть строки заголовков, сдвигаем диапазон, чтобы их исключить
      if (NUMBER_OF_HEADER_ROWS > 0) {
        range = range.offset(NUMBER_OF_HEADER_ROWS, 0);
      }

      // Выполняем сортировку
      range.sort([
        { column: SORT_COLUMN_INDEX_1, ascending: ASCENDING },
        { column: SORT_COLUMN_INDEX_2, ascending: ASCENDING }
      ]);
    } else {
      Logger.log("Лист не найден: " + sheetName);
    }
  });
}

Объяснение кода:

  1. Массив имен листов: Вы задаете список имен листов, из которых хотите извлечь данные и отсортировать их.
  2. Цикл forEach: Для каждого имени листа из массива выполняется поиск соответствующего листа в активной таблице.
  3. Проверка существования листа: Если лист с указанным именем существует, выполняется операция сортировки.
  4. Сортировка диапазона: Код сортирует данные, начиная с диапазона, который исключает строки заголовков, если таковые имеются.
  5. Логирование ошибок: Если лист не найден, выводится сообщение в логах.

Как использовать:

  1. Откройте Google Sheets.
  2. Перейдите в "Расширения" > "Apps Script".
  3. Вставьте предложенный код в редактор, сохраните и запустите функцию sortMultipleSheets.

Теперь вы можете легко сортировать данные из нескольких листов с помощью одного скрипта.

Оцените материал
Добавить комментарий

Капча загружается...