1

例:

https://spreadsheets.google.com/ccc?key=0Am8IA9FchrLbdHlkbWFMOWtZa1Y0RWpMNUV5Q3RMaVE&hl=en&authkey=CPXlr5UL

編集時トリガーをインストールすると、関数に開始行と終了行および列が渡されます。ただし、どのシートが編集されたかではありません。

当然、最初に考えたのは SpreadsheetApp().getActiveSheet() を取得することでしたが、うまくいきません。

サンプル スプレッドシートの任意のセルを編集します。インストールされた編集時トリガーは、何を編集したかを示す値を Sheet1 に入力します。シート 2 またはシート 3 に切り替えて、何かを編集します。Sheet1 が編集されたことを常に報告します。

トリガーのコード:

function my_on_edit(e) {

  //the object passed in, e, doesn't know what sheet was edited. Really!

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheetname = ss.getName();

  var thesheet = ss.getActiveSheet();

  var sheetname = thesheet.getName();

  //Tell us what was edited, please.
  ss.getSheetByName("Sheet1").getRange("A2:E2").setValues([[ spreadsheetname, sheetname, e.range.rowStart, e.range.columnStart, Utilities.jsonStringify(e)]]);

}

シートを編集するにはどうすればよいですか? これは私の間違いですか、それともバグですか? それとも、イベント処理の方法に欠陥がありますか?

4

3 に答える 3

1

多くのフォーラムでこの回避策を見つけましたが、使用しようとすると、e.gridId = undefined. 頭をぶつけて髪を引っ張った後、いくつかの代替案を試し、解決策を見つけました。そこで、私の小さな発見を共有したいと思いました。

e.range.getGridId()同じ値を返すようになりました。したがって、上記のスクリプトの 2 行目を次のように変更します。

var s = findSheetById_(e.range.getGridId());

私が行ったのと同じ未定義の問題が発生している場合に機能させるために。

于 2012-12-14T23:54:04.123 に答える
0

この質問を Google Apps スクリプト ヘルプ フォーラムにクロスポストしました。

http://www.google.com/support/forum/p/apps-script/thread?tid=535e1d8ff33a731f&hl=en

ヘンリケ・アブレウは答えた。これは、Google Apps Script がインストールされた onedit トリガーを実行する方法の欠陥です。しかし、彼は文書化されていない回避策も提供しました。

どのシートが編集されたかを調べるために使用する、文書化されていないものが 2 つあります。最初に、インストール可能な編集機能に渡されたパラメーターを調べて、シートの ID である "gridId" パラメーターを見つけました (URL に表示される番号と同じ ...#gid=)。そして、コード エディタには表示されますが、ドキュメントには表示されない sheet.getSheetId() です。以下に例を示します。

function my_on_edit(e) {
  var s = findSheetById_(e.gridId);
  var r = e.range;
  s.getRange(r.rowStart, r.columnEnd+1).setValue( s.getName() );
}

function findSheetById_(id) {
  var sheets = SpreadsheetApp.getActive().getSheets();
  for( var i in sheets )
    if( sheets[i].getSheetId() == id )
      return sheets[i];
  throw 'Unable to find sheet with id: '+id;
}
于 2011-02-22T15:12:36.987 に答える
0

e.range および e.value オブジェクトはインストール可能なトリガー (未定義) にオブジェクトを与えないため、コードは機能しません! これは Google に通知されましたが、Google-script-issuesでこのメッセージが表示された後、何のアクションもありません。

于 2015-02-14T13:17:23.663 に答える