1

スプレッドシートで使用するスクリプトがあります。セル B2 にあり、 so のような引数を取ります=myfunction(A2:A12)。内部的には、関数は広範囲のセルから情報を取得します。

何も機能していないようです。
Scripts > Resources > Current Project Triggers > On edit
Scripts > Resources > Current Project Triggers > On openに追加してみました

ドキュメントを編集するたびに、この関数で結果を更新するにはどうすればよいですか?

4

3 に答える 3

1

この正確なコードが機能するかどうかはわかりませんが、次のようなことを試すことができます...

function onEdit(event){
  var activeSheet = event.source.getActiveSheet();
  if(activeSheet.getName() == "ActiveSheetName") {
    var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TargetSheetName");
    targetSheet.getRange(2,2).setValue("=myfunction(A2:A12)");
  }
}

B2 セルがシート "TargetSheetName" にあり、編集されたセルがシート "ActiveSheetName" にあると仮定すると、任意のシートの任意のセルを編集すると、関数 onEdit がトリガーされます。その編集されたセルがシート「ActiveSheetName」上にあるかどうかを確認する if ステートメントがあるため、編集されたセルがそのシート上にある場合にのみトリガーされ、B" セルが値 =myfunction(A2:A12) に設定されます。強制的に更新します(推測)。

私が正しく、役に立てば幸いです

于 2013-04-25T18:35:58.163 に答える
1

同様の問題がありました.1つの特定のセルを「監視」して機能をトリガーしたかったのです。

私は次のことを行いました(A1が私が見ているセルであるふりをします)

IF(LEN(A1) < 1, " ", customFunction() )

そのセルを編集したことがある場合、これは正常にトリガーされました。でも:

「カスタム関数は値を返しますが、それらが含まれるセルの外に値を設定することはできません。ほとんどの場合、セル A1 のカスタム関数はセル A5 を変更できません。ただし、カスタム関数が double 配列を返す場合、結果は含まれるセルをオーバーフローします。カスタム関数を含むセルの下と右のセルに入力します。return [[1,2],[3,4]]; を含むカスタム関数でこれをテストできます。" から: https://developers.google.com/apps-script/execution_custom_functions

これはほとんど役に立たないものですが、あなたのケースではうまくいくかもしれませんか?

カスタム関数がプロジェクトトリガーに割り当てられている場合、それはより強力なので、個人的には「スクリプト>リソース>現在のプロジェクトトリガー>編集中」に追加するのをやめました

基本的に「列を監視」したため、現在のセルが「編集範囲」内にある場合にのみ処理が行われました。これは少し面倒で、いくつかの隠しセルが必要ですが、現時点ではうまくいきます

  var rowIndex = thisspreadsheet.getActiveCell().getRowIndex();
  var colIndex = thisspreadsheet.getActiveCell().getColumn();
  //clamp to custom range
  if(rowIndex < 3 && colIndex != 5)
  {
      return 0; 
  }

  //check against copy
  var name = SpreadsheetApp.getActiveSheet().getRange(rowIndex, 5).getValue();
  var copy = SpreadsheetApp.getActiveSheet().getRange(rowIndex, 6).getValue();
  if(name != copy )
  {
     ///value has been changed, do stuff
     SpreadsheetApp.getActiveSheet().getRange(rowIndex, 6).setValue(name);
  }
于 2013-10-14T16:05:12.883 に答える