Google Sayfaları otomatik sıralamasıyla ilgili bazı verileri nasıl yapabilirim?


57

Diyelim ki Google Sayfaları bazı verileri, örneğin sütunu otomatik olarak sıralamalı C.

Bunu nasıl yaparım?

Verileri sağ tıklayıp Verileri sırala'yı seçerek el ile sıralayabileceğimi biliyorum , ancak aradığım şey bu değil.

Yanıtlar:


51

Sen kullanabilirsiniz fonksiyonunu bunun için ancak tek bir yerde ve başka bir yerde, bu verilerin bir otomatik olarak sıralanır kopya verilerinizi olması gerekir.sort()

Örneğin, verilerimle birlikte Sayfa1’im olduğunu varsayalım:

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

Sonra Sayfa2'de, A1 hücresinde bu işlevi koyardım:

= sort (Sayfa1! A: C, 3, DOĞRU)

Bu verilerimi gösterir, ancak artan şekilde C sütununa (üçüncü sütun) göre sıralanır.

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

Parametreler noktalı virgül ile ayrılmalıdır, ;örneğin= sort(Sheet1!A:C; 3; TRUE)

2
@Petr Bu virgüllerde benim için gayet iyi çalışıyor.
William Jackson,

6
@ user17634: Bu, yerel ayarlarınıza bağlıdır.
Vidar S. Ramdal

41

Verileri otomatik olarak yerinde sıralamak için Google Apps Komut Dosyaları'nı kullanmak da mümkündür .

Bunu başarmak daha zor ve hataya açık olabilir (hala William Jackson'ın çözümü olan +1 BTW'ye giderdim), ancak gösterecek kadar ilginç olduğunu düşündüm.

Şuna benzeyen bir sayfam var:

otomatik sıralama sayfası

Bu adımları kullanarak yeni bir komut dosyası ekledim:

  • menüde, Araçlar -> Komut Dosyası Düzenleyicisi ...
  • seçmek Yeni bir proje oluşturun
  • Görünen boş kod penceresinde, bir hücre düzenlendiğinde otomatik olarak çalışacak olan aşağıdaki kodu yapıştırın:

    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 } );
      }
    }
    
  • sayfaya geri dönün ve tablo sıralamasını her seferinde otomatik olarak görmek için değerlerle oynamaya başlayın

Not:

Yukarıdaki komut dosyasında

  • değer 4D sütununun dizinini gösterir ( Valuesütun - sıralanacak olan)
  • değer "B3:E9"tablo aralığını gösterir (başlık satırı hariç)

Masanız büyük olasılıkla benimkinden farklı olacak, bu nedenle bu değerler buna göre ayarlanmalıdır.


Seninki [edit] işlevini onEdit (event) 'de denedim {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}); }} fakat bir hata almaya devam edin: TypeError: "source" özelliği tanımsız olarak okunamıyor. (satır 2) aşağıdaki koddur: var sheet = event.source.getActiveSheet (); herhangi bir fikir? NM, sadece kod sayfasından çalıştırırken hatayı alın, ancak asıl spreadshee'de düzgün çalışıyor
drizzt09

ancak bir hata almaya devam edin: TypeError: "source" özelliği undefined konumundan okunamıyor. (satır 2) aşağıdaki koddur: var sheet = event.source.getActiveSheet (); herhangi bir fikir? NM, yalnızca komut sayfasından çalıştırırken hatayı alın, ancak asıl e-tabloda düzgün şekilde çalışıyor. Şimdi soru ... onun AZ sıralama, nasıl ZA otomatik sıralama olarak değiştiririm? teşekkürler
drizzt09

@ drizzt09 Muhtemelen gerçek bir olay tetiklendiğinde, Google Spreadsheet altyapısı tarafından uygun şekilde doldurulmuş olan parametre nulliçin belirlediğiniz yöntemi çağırdığınızda event.
Cristian Lupascu

3
@ drizzt09 değiştirmek, sıralama düzenini değiştirmek için range.sortböyle bir çizgi: range.sort( { column : columnToSortBy, ascending: false } ); . Daha fazla sıralama seçeneği için developers.google.com/apps-script/class_range#sort
Cristian Lupascu

@ w0lf Teşekkürler mükemmel çalıştı. şimdi ona eklemek veya tam olarak aynı işlevi yerine getiren ancak açık veya yenileştirilmiş ayrı bir işleve sahip olmak istiyorum. Bu yüzden, excel sayfasını açtığımda / yenilediğimde, 4. sütundaki kodu, şu anki kodunuzla düzenlediğimde aynı inen 4. sütunu otomatik olarak sıralayacak. Teşekkürler

10

İşte 1. sütuna göre otomatik olarak işlem yapacak ve bir Başlık satırı varsayan genel bir komut dosyası.

Bir komut dosyası oluşturmak için:

  • Menüde, Araçlar -> Komut Dosyası Düzenleyicisi'ne gidin ...

Boş kod penceresinde, bir hücre düzenlendiğinde otomatik olarak çalışacak olan aşağıdaki kodu yapıştırın:

 // 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();Burada olanlar yerine yapmak zorunda kaldığımı öğrendim .
dldnh

Bu harika çalışıyor, ancak bunu nasıl düzenleyebilirim, böylece yalnızca dokümanda tek bir sayfada sıralanabilir?
moobot

iş gibi görünmüyor
shadowz1337

6

Komut dosyası olmadan başka bir seçenek:

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

Aralık kısıtlanır (A1: C3), çünkü sıra artan sırada boş girdiler görünecektir.


4
Lütfen bunu nereye koyacağımı bana bildirir misiniz?
Louis Tran,

1
SELECT * WHERE C <> '' ORDER BY CBoş girdileri yoksaymak için kullanabilirsiniz , ardından geçerli ve gelecekteki tüm satırları dahil etmek için yeterince geniş bir aralık kullanabilirsiniz.
Guss

0

Komut dosyası çözümünü kullanarak, ancak birden fazla sütun üzerinde sıralama

Bir açılır menü sütununa ve sonra tarihe göre sıralamak istedim.

Bunu yapmak için, Cristian ya da geekspotz'in kod parçacıklarından birinin "range.sort" satırını değiştirin:

// 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}]);

Aradaki fark, tüm ifadenize (dizi) düz parantez eklemek ve sıralamaları virgüllerle ayırmaktır.

Serge'in Yığın Taşması cevabından çıkarılan sıralama kod değişikliği burada : Otomatik Sayfalarda Otomatik Sıralama


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.