En Google Spreadshets, ¿cómo puede recorrer todas las hojas disponibles sin saber el recuento total?

10

Estoy manteniendo estadísticas para el equipo de béisbol de mi hija. Tengo una hoja para cada juego, cada uno idéntico en estructura. Quiero crear una hoja de resumen que sume los números de las otras hojas. ¿Cómo debo construir las fórmulas para hacer referencia al número N de hojas?

Ejemplo:

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

No quiero regresar y cambiar cada fórmula cuando se agrega una nueva hoja.

Actualización: buscando un poco más en la Ayuda de Google, no creo que esto sea compatible. Lo que estoy haciendo se conoce como un rango 3D y, aunque es compatible con Excel, no es compatible con la hoja de cálculo de Google.

Jacob Jan Tuinstra
fuente
1
Estas preguntas y respuestas que di también podrían ser de interés: webapps.stackexchange.com/a/42960/29140
Jacob Jan Tuinstra el

Respuestas:

18

Si no le importa usar una macro, puede hacer lo siguiente. Agregue este guión a su hoja de cálculo (Herramientas -> Guiones -> Editor de guiones):

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

y use la fórmula = getTotalSum ("A1") , donde "A1" es la celda que desea resumir en todas las hojas (excepto en la que coloca la fórmula).

Hice un script de prueba que puede consultar: https://spreadsheets.google.com/ccc?key=0Ao3E95ou1MgbdG45blRvWlVaYkxFY01PQUhvZkZQcEE&hl=en&authkey=CPyZqxk

david
fuente
Esto es exactamente lo que estoy buscando, pero cada vez que se ejecuta el script se agrega al valor que está actualmente en la celda, por lo que obtengo más que la suma de las hojas en la celda cada vez que se ejecuta. ¿Cómo puedo hacer que elimine / reemplace el valor actual y solo agregue la suma de las otras hojas?
Keith el
¿Está utilizando la misma posición de celda para hacer el resumen? Si es así, entonces probablemente esté agregando eso al total. Y luego, cuando lo ejecuta nuevamente, agrega la nueva suma a la suma anterior, etc., etc. Si lo coloca en otra celda, debería funcionar. Si prefiere no hacerlo, necesitaría cambiar el script para obtener la identificación de la hoja actual y luego agregar una marca de verificación a la instrucción if para que no incluya eso. Primero se debe agregar por encima de bucle: var thissheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();Entonces segundo cambio si la declaración de este modo:if (typeof(val) == 'number') && (i != thissheet)
goodship11
Vaya, sintaxis incorrecta en la instrucción if. Utilice esto:if (typeof(val) == 'number' && i != thissheet)
merchandising11
1
Si los valores de las otras celdas cambian, el valor devuelto no se actualiza porque una función personalizada solo se ejecuta cuando cambian sus parámetros.
Rubén