【问题标题】:Google Spreadsheet Script: "Cannot find function getRange in object Sheet" when creating a simple functionGoogle电子表格脚本:创建简单函数时“无法在对象表中找到函数getRange”
【发布时间】:2014-02-24 18:05:22
【问题描述】:

对不起,这个愚蠢的问题,但我已经搜索了整个互联网,我找不到一个好的教程来学习如何在 Google 电子表格脚本中编程。

我想做一个非常简单的函数,只是为了练习。

function simplesum(input) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets();
  var range = sheet.getRange(input);

var x = 0;

for (var i = 1; i <= range.getNumRows(); i++) {
for (var j = 1; j <= range.getNumColumns(); j++) {

var cell = range.getCell(i, j);

x += (cell.getValue());
}
}

return x;
}

我知道我可以使用 =sum() 来做同样的事情。这里的想法是学习如何编程。

当我尝试在单元格中使用我的函数时:(即:=simplesum((A1:A8)) 它给出了一个错误提示:“TypeError: Cannot find function getRange in object Sheet.(第 4 行)”

我该怎么办?

再一次,对不起这个愚蠢的问题......

【问题讨论】:

    标签: javascript google-apps-script google-sheets


    【解决方案1】:

    在本例中,您将 Google Apps 脚本函数实现为 自定义函数,在电子表格单元格中调用。

    当您将范围传递给在电子表格单元格中调用的自定义函数时,您传递的不是范围对象或范围引用,而是二维 Javascript 值数组。所以你的自定义函数应该只处理那个数组。

    function simplesum(input)
    {
      var x = 0;
      for (var i = 0; i < input.length; i++)
      {
        for (var j = 0; j < input[0].length; j++)
        {
          x += input[i][j];
        }
      }
      return x;
    }
    

    【讨论】:

    • 非常感谢!它完美地工作!还有一个愚蠢的问题:我习惯于在 VBA 上编程。在 Excel 中,我们可以从代码内部调用函数,例如 application.sum.。有没有办法在 Google Apps 脚本上执行此操作?
    • Google 应用程序脚本不提供电子表格函数。
    【解决方案2】:

    这是有效的:

    function sum(input) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet(); // your mistake : getSheets() 
      var range = sheet.getRange(input);
    
      var x = 0;
    
      for (var i = 1; i <= range.getNumRows(); i++) {
        for (var j = 1; j <= range.getNumColumns(); j++) {
    
         var cell = range.getCell(i, j);
    
          x += cell.getValue();
       }
     }
    
      return x;
    }
    
    function main () // Yes, I am a former C-programmer ...
    {
       var s = sum ("A1:B3"); // Notice the quotes. A string must me entered here.
       Logger.log('s = ' + s);
    }
    

    【讨论】:

    • 请在您的回答中添加更多详细信息。
    【解决方案3】:
    var sheet = ss.getSheets();
    

    返回一个工作表数组,这意味着 sheet.getRange(input) 将抛出该错误。试试这个:

    var sheet = ss.getSheets()[0];
    

    它选择工作表数组的第一张工作表。谷歌为此提供了一些不错的文档。例如,here's its documentation on getRange()。请注意,它也使用 ss.getSheets()[0] 。希望这会有所帮助!

    【讨论】:

    • 感谢您的回答...我已经进行了调整,但现在出现了一个新错误:“未找到范围(第 4 行)。”
    • 这似乎是您输入的问题——您使用什么输入来创建新错误?确保它们是有效的。
    猜你喜欢
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多