Buat pengelompokan di Google Sheets

Sep 14 2020

Saya ingin menerapkan Grup di Google Sheets melalui API (appscript) karena metode langsung tidak bekerja secara dinamis. Saya memiliki kolom bernama level (0-8) dan kemudian dua kolom lagi (info lainnya). Saya ingin menulis naskah untuk membuat kelompok. Ini akan memeriksa kolom pertama yang memiliki level dan jika baris berikutnya memiliki level lebih dari level i saat ini, itu akan membuat grup dari baris-baris itu sampai datang baris yang memiliki level yang sama atau kurang dari level i. Misalnya, level adalah: 1,2,3,4,1,0,3,4. Dalam hal ini akan dimulai dari 1 dan membuat grup dari 2,3,4 karena mereka lebih besar dari 1. Lewati 1,0 karena mereka sama atau kurang dari itu dan kemudian buat grup yang terdiri dari 3,4. Kemudian akan berjalan untuk 2 dan melakukan hal yang sama, buat grup untuk 3,4 dan lewati 1,0 dan kemudian buat grup untuk 3,4.

Ini tautannya: https://docs.google.com/spreadsheets/d/1Ejbkl2imgEFi2mVwQ81xF5OkC97IXc4UcQIC3dxwPh4/edit?usp=sharing

Berikut kodenya:

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)

          }
          
          }

Inilah cara saya secara manual mencapai pengelompokan sesuai gambar: https://drive.google.com/file/d/1JthF2ZJXgj5--0IOnW1LCM5Pneo9XUxJ/view?usp=sharing https://drive.google.com/file/d/1JthF2ZJXgj5--0IOnW1LCM5Pneo9XUxJ/view?usp=sharing

Jawaban

3 Tanaike Sep 14 2020 at 15:56

Poin modifikasi:

  • Dalam skrip Anda, tampaknya nilai dari kolom "A" di "Sheet1" tidak digunakan untuk kedalaman grup.
  • Dalam hal ini, saya ingin mengusulkan aliran berikut.
    1. Ambil nilai dari kolom "A".
    2. Atur kedalaman grup menggunakan nilai yang diambil.

Skrip yang dimodifikasi:

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

Hasil:

Ketika skrip di atas digunakan untuk Spreadsheet Anda bersama, hasil berikut diperoleh.

Referensi:

  • shiftRowGroupDepth (delta)