【问题标题】:google script error Range not found (line 6, file "Code")谷歌脚本错误范围未找到(第 6 行,文件“代码”)
【发布时间】:2017-12-23 08:49:50
【问题描述】:
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;

}

我在运行此代码时不断出错。错误是 Range not found(第 6 行)。解决此错误的方法是什么?

【问题讨论】:

  • 能问一下你给的cell的值吗?
  • 我没有声明单元格值,但我希望该单元格是所有表格的总和
  • 因为没有声明cell的值,所以出现你问题的错误。
  • 我没有声明单元格值,但我希望单元格是用户定义的,并将在所有工作表中求和
  • 我该如何声明这个单元格值?

标签: google-apps-script google-sheets


【解决方案1】:

这是修改后的脚本。此脚本通过排除您设置的工作表名称进行计算。

function getTotalSum(cell) {
  var excludesheets = ["SUMMARY", "TOTAL", "MASTER"]; // Added
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var sum = 0;
  for (var i = 0; i < sheets.length ; i++ ) {
    var sheet = sheets[i];
    if (!~excludesheets.indexOf(sheet.getName())) { // Added
      var val = sheet.getRange(cell).getValue();
      if (typeof(val) == 'number') {
        sum += val;   
      }
    }
  }
  return sum;
}

编辑:自动重新计算自定义函数,包括其他工作表的值

为了使电子表格重新计算,需要让它知道值已更改。但是在=getTotalSum("A1")给出范围时,即使"A1"的值改变了,"A1"的范围也没有改变。因此,重新计算不会运行。

作为几种解决方法之一,我认为它通过给出单元格的坐标让电子表格知道单元格值的变化。

  • 例如,当您使用=getTotalSum("A1")对“sheet1”、“sheet2”和“sheet3”的每个“A1”求和时,请修改为=getTotalSum("A1", sheet1!A1, sheet2!A1, sheet3!A1)

注意:

  • 您不需要修改我回答的脚本。
    • sheet1!A1, sheet2!A1, sheet3!A1 不用于自定义功能。这仅用于让电子表格知道单元格值的变化。
  • 通过给出sheet1!A1, sheet2!A1, sheet3!A1,当每个“A1”中的一个发生变化时,电子表格可以知道变化并重新计算。

【讨论】:

  • 它仍在从“TOTALS”表中添加值。我该如何解决这个问题?另外,每当我在其中一个工作表中编辑某些内容时,我怎样才能让公式自动刷新,而不是我必须删除并重新输入所有公式才能刷新?
  • @kate 对于给您带来的不便,我深表歉意。在您的评论中,您说它是"SUMMARY""TOTAL""MASTER"。所以我使用了var excludesheets = ["SUMMARY", "TOTAL", "MASTER"];。如果您将名称从"TOTAL" 更改为"TOTALS",请将var excludesheets = ["SUMMARY", "TOTAL", "MASTER"]; 更改为var excludesheets = ["SUMMARY", "TOTALS", "MASTER"];。如果这不起作用,您可以向我们展示您的样品表吗?
  • 我找到了一种解决方法,就是将我在“总计”中具有值的列移动到不同的列,以避免添加数字。当我在任何工作表中编辑值时,有没有办法让它自动刷新?这是我的示例工作簿的链接:docs.google.com/a/bluestarvending.com/spreadsheets/d/…
  • 谢谢它现在工作正常!但是我拥有此功能的全部目的是对所有工作表求和,即使添加了新工作表,它也会自动对来自该新工作表的值进行求和。如果我引用它 =getTotalSum("A1", sheet1!A1, sheet2!A1, sheet3!A1) 那么每次我添加新工作表时,我都必须引用它。我希望它可以自动引用所有工作表,即使添加了新工作表。有没有办法做到这一点?
  • @kate 在这个解决方法中,不幸的是,它不能这样做。插入新工作表时,如果您不想在新工作表上排除计算,还必须修改脚本。很抱歉,我没有注意到您会从您的问题中插入新的工作表。我很抱歉我的英语不好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 2018-11-24
相关资源
最近更新 更多