1

他のセルの行の内容に基づいてセルの値を計算するonEdit-scriptがあります。ターゲットセルの1つの値が変更されたときに計算を常にやり直す必要はないため、このスクリプトを通常のセル関数ではなくonEditトリガーに含める必要がありますが、代わりに特定の条件をチェックし、それらが満たされた場合にのみ再計算します。

これに関して私が抱えている小さな問題は、onEdit-scriptがデータを読み取るセルの1つに、単純な数値ではなく関数が含まれていることです。セルにデータを入力すると、このセル関数とonEdit-scriptの両方がトリガーされることがあるため、これにより問題が発生します。また、ほとんどの場合、oEdit-functionはcell-functionが終了する前に実行されるため、onEdit-functionはこのセルから「Thinking」を取得するだけなので、NaNを返します。

したがって、これに対する便利な解決策は、onEdit-functionに「ターゲット」セルの計算が完了するのを待たせることだったと思いますが、これを行う方法はないと思いますか?

もちろん、セル関数(基本的にはいくつかの機能が追加されたSUM関数)をonEdit-scriptに移動することもできます。これにより、問題が解決します。

しかし、私には、onEdit-triggerにすべての対話機能があるのはそれほど良いことではないようです。それとも私はばかげているだけですか?

それとも、どういうわけか私が取ることができる別のアプローチはありますか?

4

3 に答える 3

2

最善の解決策は、可能であれば、カスタム数式(「考える」)を通常のスプレッドシート数式に置き換えることだと思います。そして、それは「機能が追加された」単なるSUM関数であるため、あなたのケースのようです。おそらくSUMIFで十分でしょう。

関数が実際に複雑で、通常の数式として記述できない場合(これは本当に疑わしいです)、最善の解決策は、計算をonEditトリガーに移動することです。

あなたの問題に関係なく、私は常にカスタム数式を使用しないことをお勧めします、それらは本当に問題があります。たとえば、キャッシュの問題に遭遇していませんか?

于 2011-12-12T12:38:51.063 に答える
1

試してみてください: SpreadsheetApp.flush(); onEdit() スクリプトの先頭で、続行する前に再計算を強制します。

http://code.google.com/googleapps/appsscript/class_spreadsheetapp.html#flush

于 2011-12-12T21:54:42.857 に答える
0

onEdit が計算を待機するようにするには、次のことを試してください。

function onEdit(e) {

  // ...some if-condition that makes sure the following sleep is not called whenever any cell in your spreadsheet is edited

  Utilities.sleep(1000); // 1000 is the amount of milliseconds
}

https://developers.google.com/apps-script/reference/utilities/utilities#sleep(整数)

スリープの使用は脆弱ですが、計算に予想よりも多かれ少なかれ時間がかかる場合に備えて. デバッグが困難なタイミングの問題が発生する可能性があります。

したがって、これに対する便利な解決策は、「対象の」セルが計算を完了するまで onEdit 関数を待機させることだったと思いますが、これを行う方法はないと思いますか?

前述の if 条件でセル (特定の範囲) を参照するには、次の回答を参照してください。Google スプレッドシート SCRIPT 編集されたセルが特定の範囲にあるかどうかを確認する

于 2020-05-22T07:27:14.383 に答える