No Google Spreadshets, como você pode percorrer todas as planilhas disponíveis sem saber a contagem total?

10

Estou mantendo estatísticas para o time de beisebol da minha filha. Eu tenho uma ficha para cada jogo, cada um com estrutura idêntica. Quero criar uma planilha de resumo que totalize números das outras planilhas. Como devo construir as fórmulas para referenciar o número N de folhas?

Exemplo:

=G1!C2+G2!C2+G3!C2

Não quero voltar e alterar cada fórmula quando uma nova planilha for adicionada.

Atualização: Pesquisando um pouco mais na Ajuda do Google, não acho que isso seja suportado. O que estou fazendo é chamado de intervalo 3D e, embora seja suportado no Excel, não é suportado no Google Spreadsheet.

Jacob Jan Tuinstra
fonte
11
Este Q & A que eu dei, pode ser do seu interesse, bem como: webapps.stackexchange.com/a/42960/29140
Jacob Jan Tuinstra

Respostas:

18

Se você não se importa de usar uma macro, pode fazer o seguinte. Adicione este script à sua planilha (Ferramentas -> Scripts -> Editor de scripts):

function getTotalSum(cell) {
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
    var sum = 0;
    for (var i = 0; i < sheets.length ; i++ ) {
        var sheet = sheets[i];
        var val = sheet.getRange(cell).getValue();

        if (typeof(val) == 'number') {
            sum += val;   
        }       
    }

    return sum;
}

e use a fórmula = getTotalSum ("A1") , onde "A1" é a célula que você deseja resumir em todas as planilhas (exceto a que você colocou a fórmula).

Fiz um script de teste que você pode conferir : https://spreadsheets.google.com/ccc?key=0Ao3E95ou1MgbdG45blRvWlVaYkxFY01PQUhvZkZQcEE&hl=pt_BR&authkey=CPyZqxk

david
fonte
É exatamente isso que estou procurando, mas cada vez que o script é executado, ele adiciona o valor que está atualmente na célula, então estou obtendo mais do que a soma das planilhas na célula cada vez que é executado. Como faço para excluir / substituir o valor atual e apenas adicionar a soma das outras planilhas?
Keith
Você está usando a mesma posição da célula para fazer o resumo? Nesse caso, provavelmente está adicionando isso ao total. E quando você o executa novamente, ele adiciona a nova soma à soma antiga, etc. etc. Se você o colocar em outra célula, ele funcionará. Se você preferir, altere o script para obter o ID da planilha atual e adicione uma verificação à instrução if para que não inclua isso. Primeiro adicione acima para loop: var thissheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();Então segunda alterar a declaração se assim:if (typeof(val) == 'number') && (i != thissheet)
goodship11
Opa, sintaxe errada na instrução if. Use isto:if (typeof(val) == 'number' && i != thissheet)
goodship11
11
Se os valores das outras células mudarem, o valor retornado não estará sendo atualizado porque uma função personalizada é executada apenas quando seus parâmetros são alterados.
Rubén