我正在尝试将dumpObject函数添加到电子表格容器绑定脚本中。
理想情况下,它是为了查看通过触发器传递的变量。
我可以在脚本编辑器中整天运行它,但是当设置为onEdit事件或onEdit Installible触发器时,它会在没有错误的情况下死掉。
我做了一些试验和错误的Toast消息,并确认dumpObject中的代码正在从Trigger执行。
如果您使用下面的代码,请将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, '');
}
答案 0 :(得分:1)
你没有得到你对事件对象的期望。如果你投入:
for(var q in e) {
Logger.log(q + " = " + e[q])
}
然后检查脚本编辑器中的View-> Logs菜单项
source = Spreadsheet
user = <your user>
因此,检查docs,您可以将其作为e.range.setComment("Edited at: " + new Date().toTimeString());
的替代方案:
e.source.getActiveSheet().getActiveCell().setComment("Edited at: " + new Date().toTimeString());
注意:您可以通过将您的语句包装在try catch中来调试错误,就像您(秘密)获取错误一样:
try {
e.range.setComment("Edited at: " + new Date().toTimeString());
} catch (ex) {
Logger.log(ex);
}
然后检查上面提到的日志(或者如果您愿意,可以转储到Browser.msgBox()
。)
答案 1 :(得分:0)
这可能不是一个很好的“答案”,但它确实有效。
我发现用Object.prototype.toString.call(obj)替换typeof我得到了一些可用的东西。
值得注意的是,e对象返回[object Object]但属性(e.user)返回[object JavaObject]
if (Object.prototype.toString.call(obj).indexOf("object") != -1) {
var child = null;
var output = tab + name + '\n';
tab += '\t';
for(var item in obj){
child = obj[item];
if (Object.prototype.toString.call(child).indexOf("object") != -1) {
output += dump(child, item, depth + 1, tab);