- Вы хотите отсортировать листы в электронной таблице.
- Формат имени листа:
MM-dd-yyyy
. - Существует лист с именем листа
GUI
. - Существует несколько листов с именем листа
MM-dd-yyyy
. - Вы хотите отсортировать листы следующим образом.
- 1-й лист -
GUI
.Листы MM-dd-yyyy
с самой ранней даты до самой поздней.
Если мое понимание верно, как насчет этой модификации?Пожалуйста, подумайте об этом как об одном из нескольких ответов.
В этой модификации я использовал следующий поток.
- Извлечение всех листов.
- Создание массива объектовдля сортировки.
- Объект включает в себя объект листа и значение, преобразованное из
MM-dd-yyyy
во время unix.
- Сортировка массива объекта по преобразованным значениям.
- Изменение порядка листов с использованием отсортированного массива.
Модифицированный скрипт:
function sortSheets () {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var obj = sheets.map(function(s) {
var sheetName = s.getSheetName();
var date = 0;
if (sheetName != "GUI") {
var ar = sheetName.split("-");
date = new Date(ar[2], ar[0], ar[1]).getTime();
}
return {sheet: s, converted: date};
});
obj.sort(function(a, b) {return a.converted > b.converted ? 1 : -1});
obj.forEach(function(s, i) {
ss.setActiveSheet(s.sheet);
ss.moveActiveSheet(i + 1);
});
}
Ссылки:
Если я неправильно понял ваш вопрос и это не тот результат, который вам нужен, я приношу свои извинения.
Редактировать:
Из вашей общей таблицы было обнаружено, что формат имени листа не MM-dd-yyyy
.Это было MM/dd/yyyy
.В этом случае, пожалуйста, измените приведенный выше скрипт следующим образом.
От:
var ar = sheetName.split("-");
До:
var ar = sheetName.split("/");