Crear agrupaciones en Google Sheets
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
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.
- Recupere valores de la columna "A".
- 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)