首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从未指定数量的工作表中获取值

如何从未指定数量的工作表中获取值
EN

Stack Overflow用户
提问于 2019-09-02 03:31:14
回答 1查看 63关注 0票数 0

我有一个电子表格,它在任何给定的时间都可以有任意数量的工作表。这些“侧页”有一个总的附加值,并放在指定的单元格中。我们会说这个总数在每个侧页上的单元格"A1“中。我想要合计所有这些侧页总数,并将总单元格放在另一个工作表上。

我已经编写了一个我认为应该可以工作的解决方案,但它永远显示为“加载”。我相信有更简单的方法可以做到这一点,我只是看不出来。

代码语言:javascript
复制
function GETSIDESHEETTOTALS(){
  var totalCell = "A1"
  var total = 0;
  var cur_ss = SpreadsheetApp.getActive();
  cur_ss.getSheets().forEach(function(sheet){
    total += sheet.getRange(totalCell).getValue();
  });
  return total;
}

我希望每个工作表的总数相加,并显示在我在主表上指定的单元格中。我已经将函数"=GETSIDESHEETTOTALS()"放到了电子表格主页上的一个单元格中。如果可能的话,我更希望它是一个细胞调用的函数。

有没有人有替代的解决方案,或者可以告诉我哪里做错了?

EN

回答 1

Stack Overflow用户

发布于 2019-09-02 04:00:45

对于那些熟悉Excel的人来说,这可以被重新表述为“我如何使用Google App Script来使用3D单元格引用求和?”

简单地看一下您的,您并不排除聚合总数的工作表。也许您正在递归地将这些值相加在一起?

我的快速示例从头开始:

代码语言:javascript
复制
function sum3D(cellRef) {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();

  var cumTotal = 0;
  for (var i=0;i<sheets.length;i++){
    if (sheets[i].getIndex()!==1){ // specifically omit the first sheet
      cumTotal += sheets[i].getRange(cellRef).getValue();
    }
  }
  return cumTotal;
}

这在我的谷歌工作表的第一个工作表中实现为"=sum3d('A1')"

但是,我建议将其设计为更一般地返回一个数组,您可以在该数组上执行任何函数(平均值、乘法等)。

例如。

代码语言:javascript
复制
  function get3D(cellRef) {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();

  var arr = [];
  for (var i=0;i<sheets.length;i++){
    if (sheets[i].getIndex()!==1){
      arr.push( sheets[i].getRange(cellRef).getValue());
    }
  }
  return arr;
}

并实现为例如"=sum(get3d('A1'))"

编辑代码中一些不必要的部分已经被合并(但整体功能保持不变)

EDIT 2在如何指定聚合器工作表方面有明显的改进。例如,您可以简单地在公式中传入工作表名称,并根据"sheetsi.getName()“的返回值省略该名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57748894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档