Вопрос или проблема
Я хотел бы, чтобы эта функция применялась к нескольким листам:
Как вы можете видеть, я получаю имя листа 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);
}
});
}
Объяснение кода:
- Массив имен листов: Вы задаете список имен листов, из которых хотите извлечь данные и отсортировать их.
- Цикл
forEach
: Для каждого имени листа из массива выполняется поиск соответствующего листа в активной таблице. - Проверка существования листа: Если лист с указанным именем существует, выполняется операция сортировки.
- Сортировка диапазона: Код сортирует данные, начиная с диапазона, который исключает строки заголовков, если таковые имеются.
- Логирование ошибок: Если лист не найден, выводится сообщение в логах.
Как использовать:
- Откройте Google Sheets.
- Перейдите в "Расширения" > "Apps Script".
- Вставьте предложенный код в редактор, сохраните и запустите функцию
sortMultipleSheets
.
Теперь вы можете легко сортировать данные из нескольких листов с помощью одного скрипта.