在Google Spreadshets中,如何在不知道总数的情况下循环浏览所有可用工作表?


10

我为女儿的棒球队保留统计数据。我为每场比赛准备了一张纸,每张纸的结构相同。我想创建一个汇总表,以汇总其他表中的数字。如何构造引用N张纸的公式?

例:

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

添加新表后,我不想返回并更改每个公式。

更新:我认为不支持在Google帮助中搜索更多内容。我正在做的事情称为3D范围,尽管Excel支持该范围,但Google Spreadsheet不支持该范围。


1
我给出的这个问题解答
Jacob Jan Tuinstra 2013年

Answers:


18

如果您不介意使用宏,则可以执行以下操作。将此脚本添加到您的电子表格(工具->脚本->脚本编辑器):

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

并使用公式= getTotalSum(“ A1”),其中“ A1”是要在所有工作表中汇总的单元格(放入公式的人除外)。

我做了一个测试脚本,您可以看一下:https : //spreadsheets.google.com/ccc?key=0Ao3E95ou1MgbdG45blRvWlVaYkxFY01PQUhvZkZQcEE&hl=en&authkey=CPyZqxk


这正是我要寻找的内容,但是每次脚本运行时,它都会添加到当前单元格中的值上,因此,每次运行时,我得到的都超过了单元格中图纸的总和。如何使其删除/替换当前值,而仅添加其他工作表的总和?
基思

您是否使用相同的单元格位置进行汇总?如果是这样,那么可能会将其添加到总数中。然后,当您再次运行它时,它将新的总和添加到旧的总和中,依此类推。如果将其放在另一个单元格中,它将可以正常工作。如果您不想这样做,则需要更改脚本以获取当前工作表的ID,然后将检查添加到if语句中,以使其不包括该内容。首先在循环上面添加:var thissheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();然后第二次更改if语句,如下所示:if (typeof(val) == 'number') && (i != thissheet)
goodship11年

糟糕,if语句的语法错误。使用它:if (typeof(val) == 'number' && i != thissheet)
goodship15年

1
如果其他单元格的值发生更改,则返回值不会被更新,因为自定义函数仅在其参数更改时运行。
鲁本

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.