スプレッドシート コンテナにバインドされたスクリプトに dumpObject 関数を追加しようとしています。
理想的には、トリガーを介して渡される変数を可視化するためです。
Script Editor 内から 1 日中実行できますが、onEdit イベントまたは onEdit インストール可能トリガーとして設定すると、エラーなしで終了します。
試行錯誤のトースト メッセージを実行し、dumpObject のコードがトリガーから実行されていることを確認しました。
以下のコードを使用して、onEdit2 をインストール可能なトリガーとして設定すると、それが表示される場合があります。
トリガーとして機能することを確認するには、onEdit2 の最初の行 //e のコメントを外します。
私が把握できる最善の方法は、オブジェクトに期待されているものとはまったく異なるトリガーからの e オブジェクトの何かですか?
このテストでは maxDepth を 5 に制限する必要があるため、1000 の深さ制限に達しているとは思いません。
UPDATE : 問題は、トリガー オブジェクトのプロパティで typeof を呼び出すことです。たとえば、「typeof e.user」は次のエラーを報告します: タイプの JavaScript 値が無効です
ありがとう、ジム
function onEdit2(e) {
//e = {fish:{a:"1",b:"2"},range:SpreadsheetApp.getActiveSpreadsheet().getActiveRange(),B:"2"};
Browser.msgBox(typeof e);
Browser.msgBox("U:" + Utilities.jsonStringify(e));
e.range.setComment("Edited at: " + new Date().toTimeString());
Browser.msgBox("ShowOBJ:"+dumpObject(e, 5));
}
function dumpObject(obj, maxDepth) {
var dump = function(obj, name, depth, tab){
if (depth > maxDepth) {
return name + ' - Max depth\n';
}
if (typeof obj === 'object') {
var child = null;
var output = tab + name + '\n';
tab += '\t';
for(var item in obj){
child = obj[item];
if (typeof child === 'object') {
output += dump(child, item, depth + 1, tab);
} else {
output += tab + item + ': ' + child + '\n';
}
}
}
return output;
};
return dump(obj, '', 0, '');
}