Crear agrupaciones en Google Sheets

Sep 14 2020

Quiero implementar Grupos en Google Sheets a través de API (appscript) ya que el método directo no funciona de forma dinámica. Tengo una columna llamada niveles (0-8) y luego dos columnas más (otra información). Quiero escribir un guión para hacer los grupos. Verificará la primera columna que tiene niveles y si la siguiente fila tiene un nivel mayor que el nivel i actual, hará un grupo de esas filas hasta que llegue una fila que tenga el mismo nivel o menos que el nivel i. Por ejemplo, los niveles son: 1,2,3,4,1,0,3,4. En esto, comenzará desde 1 y formará el grupo de 2,3,4 ya que son mayores que 1. Omita 1,0 ya que son iguales o menores que eso y luego haga un grupo de 3,4. Luego se ejecutará para 2 y hará lo mismo, hará un grupo para 3,4 y saltará 1,0 y luego hará un grupo para 3,4.

Aqui esta el link: https://docs.google.com/spreadsheets/d/1Ejbkl2imgEFi2mVwQ81xF5OkC97IXc4UcQIC3dxwPh4/edit?usp=sharing

Aquí está el código:

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)

          }
          
          }

Así es como he logrado agrupar manualmente según las imágenes: https://drive.google.com/file/d/1JthF2ZJXgj5--0IOnW1LCM5Pneo9XUxJ/view?usp=sharing https://drive.google.com/file/d/1JthF2ZJXgj5--0IOnW1LCM5Pneo9XUxJ/view?usp=sharing

Respuestas

3 Tanaike Sep 14 2020 at 15:56

Puntos de modificación:

  • En su secuencia de comandos, parece que los valores de la columna "A" en "Hoja1" no se utilizan para la profundidad del grupo.
  • En este caso, me gustaría proponer el siguiente flujo.
    1. Recupere valores de la columna "A".
    2. Establezca la profundidad del grupo utilizando los valores recuperados.

Guión modificado:

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

Resultado:

Cuando se utiliza el script anterior para su hoja de cálculo compartida, se obtiene el siguiente resultado.

Referencia:

  • shiftRowGroupDepth (delta)