Як я можу внести деякі дані під час автоматичного сортування таблиць Google?


57

Скажімо, я хочу, щоб Google Таблиці автоматично сортували деякі дані, наприклад стовпець C.

Як це зробити?

Я знаю, що я можу вручну сортувати дані, клацнувши правою кнопкою миші та вибравши Сортувати дані , але це не те, що я шукаю.

Відповіді:


51

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

Наприклад, скажіть, що у мене є Sheet1 зі своїми даними:

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

Тоді у Sheet2, комірці A1 я поставив би цю функцію:

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

Це показало б мої дані, але відсортовані за стовпцем С (третій стовпчик), у зростанні.

   | 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: це залежить від налаштувань вашої мови.
Відар С. Рамдал

42

Також можна використовувати Сценарії 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 колонкаToSortBy = 4; var tableRange = "A2: F99"; if (editedCell.getColumn () == columnToSortBy) {var range = sheet.getRange (tableRange); range.sort ({стовпець: columnToSortBy}); }} але продовжуйте отримувати помилку: TypeError: Неможливо прочитати властивість "source" з не визначеного. (рядок 2), який має такий код: var sheet = event.source.getActiveSheet (); якісь ідеї? NM, помилку отримуйте лише під час запуску зі сторінки сценарію, але вона працює належним чином на
власній

але продовжуйте отримувати помилку: TypeError: Неможливо прочитати властивість "source" з не визначеного. (рядок 2), який має такий код: var sheet = event.source.getActiveSheet (); якісь ідеї? NM, помилку отримуйте лише під час запуску зі сторінки сценарію, але вона працює належним чином на фактичній таблиці. Тепер питання ... його сортування AZ, як я можу змінити його на автоматичне сортування ZA? дякую
drizzt09

@ Drizzt09 При виклику методу ви , ймовірно , вказати nullдля eventпараметра, який в іншому випадку правильно населеної інфраструктури Spreadsheet Google , коли реальна подія.
Крістіан Лупаску

3
@ Drizzt09 змінити порядок сортування, змініть range.sortрядок: range.sort( { column : columnToSortBy, ascending: false } ); . Більше варіантів сортування див. У розробниках.google.com
apps-script/class_range#

@ 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 } );
  }
}

3
Я виявив, що повинен var sheet = SpreadsheetApp.getActiveSpreadsheet();замість того, що тут.
dldnh

Це чудово працює, але як я можу це відредагувати, щоб він сортувався лише на одному аркуші в документі?
moobot

здається, не працює
shadowz1337

6

Ще один варіант без сценарію:

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

Діапазон обмежений (A1: C3), оскільки там, де порядок зростає, порожні записи з’являться першими.


4
Скажіть, будь ласка, мені, де я маю це помістити?
Луї Тран

1
Ви можете SELECT * WHERE C <> '' ORDER BY Cігнорувати порожні записи, тоді ви можете використовувати досить великий діапазон, щоб включити всі поточні та майбутні рядки.
Гасс

0

Використовуючи рішення скрипту, але сортуйте їх у кількох стовпцях

Я хотів сортувати за стовпцем меню, а потім за датою.

Для цього змініть рядок "range.sort" будь-якого з фрагментів коду Крістіана або 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}]);

Різниця полягає в додаванні прямих дужок навколо всього висловлення (масиву) та розділення сортів комами.

Сортування модифікації коду, витягнутий з відповіді Сергія на стек переповнення тут : Автоматичне сортування за таблицями


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.