Ответы:
Вы можете использовать в 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
Сценарии 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"
представляет диапазон таблицы (исключая строку заголовка)Ваша таблица, скорее всего, будет отличаться от моей, поэтому эти значения должны быть соответствующим образом скорректированы.
null
для event
параметра, который в противном случае правильно заполняется инфраструктурой электронных таблиц Google при запуске реального события.
range.sort
строку: range.sort( { column : columnToSortBy, ascending: false } );
. Дополнительные параметры сортировки см. На developer.google.com/apps-script/class_range#sort
Вот общий сценарий, который будет автоматически сортировать на основе 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 } );
}
}
var sheet = SpreadsheetApp.getActiveSpreadsheet();
вместо того, что здесь.
Другой вариант без скрипта:
=QUERY(A1:C3,"SELECT * ORDER BY C")
Диапазон ограничен (A1: C3), потому что там, где порядок возрастает, пустые записи будут появляться первыми.
SELECT * WHERE C <> '' ORDER BY C
для игнорирования пустых записей, затем вы можете использовать достаточно большой диапазон, чтобы включить все текущие и будущие строки.
Я хотел отсортировать по выпадающему столбцу меню, а затем по дате.
Для этого измените строку «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}]);
Разница заключается в добавлении прямых скобок вокруг всего оператора (массива) и разделении сортировки запятыми.
Модификация кода сортировки получена из ответа Сержа о переполнении стека здесь : Автоматическая сортировка на листах
По этой причине в Google Sheets есть фильтры, и вам не нужно создавать новый лист в своем документе.
Документация: https://support.google.com/docs/answer/3540681.
;
например= sort(Sheet1!A:C; 3; TRUE)