Как я могу внести некоторые данные в автосортировку листов Google?

58

Допустим, я хочу, чтобы Google Sheets автоматически сортировал некоторые данные, например столбцы C.

Как мне это сделать?

Я знаю, что могу вручную сортировать данные, щелкая правой кнопкой мыши и выбирая Сортировать данные , но это не то, что я ищу.

pnuts
источник

Ответы:

52

Вы можете использовать в sort()функции для этого, но вы должны иметь свои данные в одном месте, и автоматически отсортированных копии этих данных в другом месте.

Например, скажем, у меня есть Sheet1 с моими данными:

   | A    | B    | C
=====================
 1 | This | this | 2
 2 | Is   | is   | 1
 3 | Test | test | 3

Затем в Sheet2, ячейка A1, я бы поместил эту функцию:

= сортировка (Sheet1! A: C, 3, TRUE)

Это покажет мои данные, но отсортированы по столбцу C (третий столбец), по возрастанию.

   | A    | B    | C
=====================
 1 | Is   | is   | 1
 2 | This | this | 2
 3 | Test | test | 3
Уильям Джексон
источник
Параметры должны быть разделены точкой с запятой, ;например= sort(Sheet1!A:C; 3; TRUE)
2
@Petr У меня отлично работает с запятыми.
Уильям Джексон
6
@ user17634: Это зависит от ваших региональных настроек.
Видар С. Рамдал
43

Сценарии Google Apps также можно использовать для автоматической сортировки данных на месте.

Это может быть более трудным для достижения и более подверженным ошибкам (я все еще пошел бы на решение Уильяма Джексона, +1 BTW), но я думал, что это было достаточно интересно показать.

У меня есть лист, который выглядит так:

автосортировка листа

Я добавил новый скрипт, используя эти шаги:

  • в меню, зайдите в Сервис -> Редактор скриптов ...
  • выберите Создать новый проект
  • в появившемся окне пустого кода вставьте следующий код, который будет запускаться автоматически при редактировании ячейки:

    function onEdit(event){
      var sheet = event.source.getActiveSheet();
      var editedCell = sheet.getActiveCell();
    
      var columnToSortBy = 4;
      var tableRange = "B3:E9";
    
      if(editedCell.getColumn() == columnToSortBy){   
        var range = sheet.getRange(tableRange);
        range.sort( { column : columnToSortBy } );
      }
    }
    
  • вернитесь к листу и начните играть со значениями, чтобы сортировать таблицу каждый раз автоматически

Примечание:

В приведенном выше сценарии

  • значение 4представляет индекс столбца D ( Valueстолбец - объект, который будет отсортирован)
  • значение "B3:E9"представляет диапазон таблицы (исключая строку заголовка)

Ваша таблица, скорее всего, будет отличаться от моей, поэтому эти значения должны быть соответствующим образом скорректированы.

Кристиан Лупаску
источник
Я попробовал вашу [отредактированную] функцию onEdit (событие) {var sheet = event.source.getActiveSheet (); var editedCell = sheet.getActiveCell (); var columnToSortBy = 4; var tableRange = "A2: F99"; if (editedCell.getColumn () == columnToSortBy) {var range = sheet.getRange (tableRange); range.sort ({column: columnToSortBy}); }} но продолжаю получать ошибку: TypeError: Невозможно прочитать свойство "source" из undefined. (строка 2), представляющая собой следующий код: var sheet = event.source.getActiveSheet (); есть идеи? NM, только получить ошибку при запуске со страницы скрипта, но он работает правильно на самом распространенном
drizzt09
но продолжайте получать ошибку: TypeError: Невозможно прочитать свойство "source" из undefined. (строка 2), представляющая собой следующий код: var sheet = event.source.getActiveSheet (); есть идеи? NM, только получить ошибку при запуске со страницы скрипта, но она работает правильно на реальной электронной таблице. Теперь вопрос ... сортировка AZ, как я могу изменить его на автосортировку ZA? спасибо
drizzt09
@ drizzt09 Когда вы вызываете метод, который вы, вероятно, указываете nullдля eventпараметра, который в противном случае правильно заполняется инфраструктурой электронных таблиц Google при запуске реального события.
Кристиан Лупаску
3
@ drizzt09 изменить порядок сортировки, измените range.sortстроку: range.sort( { column : columnToSortBy, ascending: false } ); . Дополнительные параметры сортировки см. На developer.google.com/apps-script/class_range#sort
Кристиан Лупаску,
@ w0lf Спасибо, что отлично сработало. Теперь я хотел бы добавить к нему или иметь отдельную функцию, которая выполняет ту же функцию, но при открытии или обновлении. Поэтому, когда я открываю / обновляю таблицу Excel, она автоматически сортирует 4-й столбец по убыванию так же, как и при редактировании кода в столбце 4 с вашим текущим кодом. Спасибо
10

Вот общий сценарий, который будет автоматически сортировать на основе 1-го столбца и предполагает строку заголовка.

Чтобы создать скрипт:

  • В меню выберите Сервис -> Редактор скриптов ...

В пустом окне кода вставьте следующий код, который будет запускаться автоматически при редактировании ячейки:

 // LinkBack to this script:
 // http://webapps.stackexchange.com/questions/7211/how-can-i-make-some-data-on-a-google-spreadsheet-auto-sorting/43036#43036

 /**
 * Automatically sorts the 1st column (not the header row) Ascending.
 */
function onEdit(event){
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 1;
  var tableRange = "A2:T99"; // What to sort.

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange);
    range.sort( { column : columnToSortBy, ascending: true } );
  }
}
geekzspot
источник
3
Я обнаружил, что должен был var sheet = SpreadsheetApp.getActiveSpreadsheet();вместо того, что здесь.
dldnh
Это прекрасно работает, но как я могу редактировать это так, чтобы он сортировал только на одном листе в документе?
moobot
не похоже на работу
shadowz1337
7

Другой вариант без скрипта:

=QUERY(A1:C3,"SELECT * ORDER BY C")  

Диапазон ограничен (A1: C3), потому что там, где порядок возрастает, пустые записи будут появляться первыми.

pnuts
источник
4
Не могли бы вы, пожалуйста, дайте мне знать, где я должен положить это в?
Луи Тран
1
Вы можете использовать SELECT * WHERE C <> '' ORDER BY Cдля игнорирования пустых записей, затем вы можете использовать достаточно большой диапазон, чтобы включить все текущие и будущие строки.
Guss
0

Использование решения сценария, но сортировка по нескольким столбцам

Я хотел отсортировать по выпадающему столбцу меню, а затем по дате.

Для этого измените строку «range.sort» фрагментов кода Cristian или geekspotz следующим образом:

// Sorts descending by edited column, then ascending by column 1 
// Note the use of an array
range.sort([{column: columnToSortBy, ascending: false}, {column: 1, ascending: true}]);

Разница заключается в добавлении прямых скобок вокруг всего оператора (массива) и разделении сортировки запятыми.

Модификация кода сортировки получена из ответа Сержа о переполнении стека здесь : Автоматическая сортировка на листах

deepstructure
источник