2

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

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

这是我的电子表格。我试图简单地让 SS 将我在y价格旁边打勾的地方加起来,但我收到一个错误消息:

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

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

干杯!

4

1 回答 1

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, '')。这将替换所有不是数字也不是小数点的字符。这没有错误检查,但我认为在个人电子表格中就足够了。

于 2011-04-30T06:30:11.157 回答