Criar agrupamento no Planilhas Google

Sep 14 2020

Quero implementar grupos no Google Sheets via API (appscript), pois o método direto não funciona dinamicamente. Eu tenho uma coluna chamada níveis (0-8) e mais duas colunas (outras informações). Quero escrever um roteiro para formar os grupos. Ele verificará a primeira coluna que tem níveis e se a próxima linha tiver um nível maior do que o nível i atual, fará um grupo dessas linhas até que venha uma linha que tenha o mesmo nível ou menos que o nível i. Por exemplo, os níveis são: 1,2,3,4,1,0,3,4. Neste, ele começará de 1 e formará o grupo de 2,3,4, pois eles são maiores do que 1. Ignore 1,0, pois eles são iguais ou menores do que isso, e então faça um grupo de 3,4. Ele irá então correr para 2 e fazer o mesmo, fazer um grupo para 3,4 e pular 1,0 e então fazer um grupo para 3,4.

Aqui está o link: https://docs.google.com/spreadsheets/d/1Ejbkl2imgEFi2mVwQ81xF5OkC97IXc4UcQIC3dxwPh4/edit?usp=sharing

Aqui está o 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)

          }
          
          }

Veja como consegui manualmente o agrupamento de acordo com as imagens: https://drive.google.com/file/d/1JthF2ZJXgj5--0IOnW1LCM5Pneo9XUxJ/view?usp=sharing https://drive.google.com/file/d/1JthF2ZJXgj5--0IOnW1LCM5Pneo9XUxJ/view?usp=sharing

Respostas

3 Tanaike Sep 14 2020 at 15:56

Pontos de modificação:

  • Em seu script, parece que os valores da coluna "A" na "Folha1" não são usados ​​para a profundidade do grupo.
  • Nesse caso, gostaria de propor o seguinte fluxo.
    1. Recupere valores da coluna "A".
    2. Defina a profundidade do grupo usando os valores recuperados.

Script 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:

Quando o script acima é usado para sua planilha compartilhada, o seguinte resultado é obtido.

Referência:

  • shiftRowGroupDepth (delta)