Как отсортировать листы в электронной таблице в хронологическом порядке по дате в скрипте приложений Google - PullRequest
1 голос
/ 24 сентября 2019

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

Я сейчас скопировалкод, сортирующий его в алфавитном порядке, который обычно правильно упорядочивает часть MM-dd, но годы не в порядке.

function sortSheets () {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetNameArray = [];
  var sheets = ss.getSheets();

  for (var i = 0; i < sheets.length; i++) {
    sheetNameArray.push(sheets[i].getName());
  }

  sheetNameArray.sort();

  for( var j = 0; j < sheets.length; j++ ) {
    ss.setActiveSheet(ss.getSheetByName(sheetNameArray[j]));
    ss.moveActiveSheet(j + 1);
  }
  ss.setActiveSheet(ss.getSheetByName("GUI"));
  ss.moveActiveSheet(1);
}

В настоящее время мой код выглядит так, но, опять же, он просто предназначен дляалфавитный, а не сортировать в хронологическом порядке.Результаты, которые я надеюсь получить, будут состоять в том, что вкладки расположены по порядку, 1 - «GUI», а 2 - начиная с самой ранней даты до самой поздней.

1 Ответ

0 голосов
/ 24 сентября 2019
  • Вы хотите отсортировать листы в электронной таблице.
  • Формат имени листа: MM-dd-yyyy.
  • Существует лист с именем листа GUI.
  • Существует несколько листов с именем листа MM-dd-yyyy.
  • Вы хотите отсортировать листы следующим образом.
    • 1-й лист - GUI.Листы MM-dd-yyyy с самой ранней даты до самой поздней.

Если мое понимание верно, как насчет этой модификации?Пожалуйста, подумайте об этом как об одном из нескольких ответов.

В этой модификации я использовал следующий поток.

  1. Извлечение всех листов.
  2. Создание массива объектовдля сортировки.
    • Объект включает в себя объект листа и значение, преобразованное из MM-dd-yyyy во время unix.
  3. Сортировка массива объекта по преобразованным значениям.
  4. Изменение порядка листов с использованием отсортированного массива.

Модифицированный скрипт:

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("/");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...