4

スプレッドシートに問題があります: タイトルで述べたように、別のセルの値に基づいてカスタム スクリプトを呼び出す数式を列に入力しましたが、この別のセルを変更しても、数式は更新されません..これは標準の数式で動作するようですが、スクリプトを呼び出すセルでは次のようになります。

  • 数式セルに空白を追加しようとしても、結果は更新されません。
  • 数式セルをクリアして数式を再入力しても、古い値が表示されたままです。
  • 数式セルを別のセルにコピー ペーストすると、新しいセルが最新の状態になります。

これが私のスクリプトです。単語が少ない場合: 指定された「会社」パラメーターについて、この基準に一致するすべての行を検索し、3 番目の列のセルを変数に格納して、最終的に返されます (したがって、最後の値を返します)。

function getLastStatut(company) {
  var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();

  var out = "not found";
  var row;
  for(i in values){
    row = values[i];
    if(row[1]==company){
      out = row[2];
    }
  }
  return out;
}

たとえば、次のようになります。

  • A1 : 日付
  • A2 : テスト
  • A3 : 実行中
  • A4 : =getLastStatut(B1)

したがって、A4 は「実行中」と表示されますが、A3 を変更しても「実行中」と表示されますが、A3 の値が表示されるはずです。

これはバグですか、それとも何か間違っていますか? どんな助けでも大歓迎です。

アレクシス

4

1 に答える 1

7

問題は、カスタム関数のキャッシング「機能」にあります。こちらの別スレで解説していますので、よろしければご覧ください。

ただし、ここでの結論は、カスタム関数は静的でないデータにアクセスしてはならず、すべての変数情報をパラメーターとして渡す必要があるということです。あなたの場合、データセット全体がスクリプトのパラメーターである必要があります。カスタム関数は決して範囲を取得しないでください。

//getting values like this is wrong (for a custom function)
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
于 2012-05-10T21:07:17.353 に答える