2011-02-01 15 views
1

例:あなたは上の編集トリガーをインストールすると編集トリガーにインストールされています...どのシートを編集しましたか?

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

、あなたの関数は、開始と終了の行と列を渡されます。しかし、編集されたシートはありません。

私の最初の考えは、SpreadsheetApp()。getActiveSheet()を取得することでしたが、それは動作しません。

サンプルスプレッドシートのセルを編集します。インストールされたon-editトリガーは、編集した内容を示す値を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)]]); 

} 

どのように私はシートを編集し得ることができますか?これは私の間違いですか?これはバグですか?イベントの処理方法が不足していますか?

答えて

0

私は、スクリプトのヘルプフォーラムをアプリGoogleにこの質問をクロスポスト:

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

エンリケアブレウは答えを答えました。これは、Google Apps Scriptがoneditトリガーをどのようにインストールしたかの欠点です。しかし、彼はまた、文書化されていない回避策を提供しました:

私はどのシートが編集されたかを知るために私が使用する2つの文書化されていないことがあります。 まず、インストール可能な編集機能に渡されたパラメータを調べることで、シートのID(url ...#gid =に表示されているものと同じ番号)である "gridId"パラメータを見つけました。 そして、コードエディタで表示されるが、ドキュメントでは表示されない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; 
} 
1

私は多くのフォーラムでこの回避策を見つけたが、私はそれを使用しようとしたとき、私はe.gridId = undefinedを取得保管しました。私の頭を叩くと私の髪を引き出した後、私はいくつかの選択肢を試して終わり、解決策を見つけました。だから私は私の小さな発見を共有すると思った:

e.range.getGridId()は同じ値を返すようになりました。あなたは私がやった同じ未定義の問題を取得している場合はそれを動作させるために

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

:への変更上記のスクリプトの2行目そう。

0

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

関連する問題