2

知識を増やすためだけに、スプレッドシートを使用するときは、可能な場合は 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;
}

これは私のスプレッドシートです。単純にy、価格の横にチェックを入れた場所に SS を追加しようとしていますが、次のようなエラーが表示されます。

TypeError: undefined のメソッド「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 に答える