我决定在使用电子表格时尽可能使用Google脚本,只是为了开始增加知识。但是我没有受过训练,很快就被卡住了。

我在youtube上看到了一些用于其他脚本的代码,但我想我已经提取了所需的东西,可以使它正常工作...

function y_add_up_function() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var range = sheet.getRange["I2:J15"];
  var data = range.getValues();
  var sum = 0;

  for (var i = 0; i < 14; ++i)
  {
    var row = data[i];
    if(row[1] == "y")
    {
      sum = sum + row[0];
    }
  }
  return sum;
}


This is my spreadsheet。我试图只是让SS加起来在价格旁边的y处打勾,但出现一个错误:


  TypeError:无法调用未定义的方法“ getValues”。 (第5行)


请教我我在做什么错^ _ ^ !!!

干杯!

最佳答案

该错误表示您正在尝试在未定义的对象上调用方法。如果查看代码,则具有range.getValues()。这意味着范围是不确定的。因此,您需要查看范围的分配:var range = sheet.getRange [“ I2:J15”]。这就是问题所在,getRange是一种方法,需要用括号来调用,即getRange(“ I2:J15”)。

这是工作代码:

function y_add_up_function() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var range = sheet.getRange("I2:J15"); // <-- fix here
  var data = range.getValues();
  var sum = 0;



  for (var i = 0; i < 14; ++i)
  {
    var row = data[i];
    if(row[1] == "y")
    {
      sum = sum + parseFloat(row[0].substring(2)); // <-- fix to get floats from "£ <number>"
    }
  }
  return sum;
}


还要注意,由于在费用列中有磅符号,因此需要去除符号以获得数字。在这里,我使用了.substring(2),但这不是很安全。如果您例如忘了在单元格中放入“£”,将不会正确读取数字。我建议将英镑符号放在列标题中,或者在解析数字时使用更复杂的方法将其删除。

例如,您可以使用row [0] .replace(/ ^ [0-9。] / g,'')。这将替换所有不是数字或小数点的字符。这没有错误检查,但是我认为在个人电子表格中就足够了。

10-04 22:06