Google E-Tablolar'da gruplama oluşturun

Sep 14 2020

Doğrudan yöntem dinamik olarak çalışmadığından Grupları Google E-Tablolar'da API (appscript) aracılığıyla uygulamak istiyorum. Düzeyler (0-8) adlı bir sütunum ve ardından iki sütun daha (diğer bilgiler) var. Grupları yapmak için bir senaryo yazmak istiyorum. Seviye içeren ilk sütunu kontrol edecek ve sonraki satır mevcut i seviyesinden daha yüksek seviyeye sahipse, aynı seviyeye veya i seviyesinden daha düşük bir satır gelene kadar bu satırlardan bir grup oluşturacaktır. Örneğin, seviyeler: 1,2,3,4,1,0,3,4. Bunda 1'den başlayacak ve 1'den büyük oldukları için 2,3,4 grubunu oluşturacaktır. Buna eşit veya daha küçük olduklarından 1,0'ı atlayın ve sonra 3,4'lük bir grup yapın. Daha sonra 2 için koşacak ve aynısını yapacak, 3,4 için bir grup oluşturacak ve 1,0'ı atlayacak ve ardından 3,4 için bir grup oluşturacaktır.

Bağlantı burada: https://docs.google.com/spreadsheets/d/1Ejbkl2imgEFi2mVwQ81xF5OkC97IXc4UcQIC3dxwPh4/edit?usp=sharing

İşte kod:

function myFunction() {
    const rootSheet = SpreadsheetApp.getActive().getActiveSheet();
    var r = rootSheet.getLastRow();
    for (var i = 3; i <= r; i++) {
        var t = 0;
        do {
            rootSheet.getRange(i,6).shiftRowGroupDepth(1);
            t = t + 1;
        } while (SpreadsheetApp.getActiveSheet().getRange(i,1).getValue() == t)

          }
          
          }

Resimlere göre gruplamayı manuel olarak nasıl başardım: https://drive.google.com/file/d/1JthF2ZJXgj5--0IOnW1LCM5Pneo9XUxJ/view?usp=sharing https://drive.google.com/file/d/1JthF2ZJXgj5--0IOnW1LCM5Pneo9XUxJ/view?usp=sharing

Yanıtlar

3 Tanaike Sep 14 2020 at 15:56

Değişiklik noktaları:

  • Komut dosyanızda, "Sayfa1" deki "A" sütunundaki değerler grup derinliği için kullanılmıyor gibi görünüyor.
  • Bu durumda, aşağıdaki akışı önermek istiyorum.
    1. "A" sütunundan değerleri alın.
    2. Alınan değerleri kullanarak grup derinliğini ayarlayın.

Değiştirilmiş komut dosyası:

function myFunction() {
  const sheetName = "Sheet1";
  
  // 1. Retrieve values from the column "A".
  const rootSheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
  const levels = rootSheet.getRange("A2:A" + rootSheet.getLastRow()).getValues();
  
  // 2. Set the group depth using the retrieved values.
  levels.forEach(([a], i) => rootSheet.getRange(i + 2, 1).shiftRowGroupDepth(a));
}

Sonuç:

Paylaşılan Elektronik Tablonuz için yukarıdaki komut dosyası kullanıldığında, aşağıdaki sonuç elde edilir.

Referans:

  • shiftRowGroupDepth (delta)