2012-05-11 175 views
1

我刚刚在电子表格脚本编辑器中将我的1800行项目划分为12个“文件”。我注意到Find函数只在活动文件中查找。脚本编辑器/文件

有无论如何去做一个全球性的发现?

还与项目中的文件有关,当引发错误时,会引用行号但不是文件名。

有没有办法确定哪个文件包含导致错误的行?

感谢 丹

回答

2

有没有办法做一个全局查找。查找只会查看当前文件。我认为,应该有一个查找和替换,将横穿整个项目,我提交并在2011年9月发行回来,在问题追踪器在:

http://code.google.com/p/google-apps-script-issues/issues/detail?id=822

请去那里和星它投上一票并在这个问题上得到任何进展的通知。

没有文件名被举报错误信息的问题也已在问题追踪器在提出:

http://code.google.com/p/google-apps-script-issues/issues/detail?id=747

+0

谢谢ScampMichael!我两个都出演。 – Dan

2

要确定导致错误的文件,你必须尝试 - 捕获错误并解析堆栈跟踪。这是我做的:

function yourCallingfunction() { 
    try { 
    //do your thing 
    } catch(err) { 
    stack = parseErr_(err) 
    Logger.log(stack); 
    throw stack; 
    } 
} 

//Try to parse errors stacktrace into a nicer format 
function parseErr_(e) { 
    var ret; 
    if(e !== undefined && e !== null && e.stack) { 
    ret = e.name +': '+e.message+' \nStacktrace: \n'; 
    var stack = e.stack.replace(/\n/g,'').match(/:\d+(\([^\)]+\))?/g); 
    for(var i in stack) 
     ret += stack[i].replace(/[\(\):]/g,'').split(/ /).reverse().join(':') + ' \n'; 
    } else 
    ret = e; 
    return ret; 
} 

关于全局查找,如果您的问题只能找,而不是替代,有一个变通方法了。看看这个:

function showMe() { 
    for(var i in this) 
    Logger.log(this[i].toString()); 
} 

但这不是真正的解决方案。您应该为@ScampMichael链接的问题添加星标

+0

这是一些非常有趣的代码,谢谢Henrique!我从这几行代码中学到了很多东西。我主演了与此相关的两个问题。 – Dan

+0

@亨利克为什么你'扔堆',而不是抛出你被抓到的错误? –

+0

@PeterHerrmann所以我不必打开脚本日志来查看堆栈。它就在信息上。当然,只有在堆栈中的最后一个函数上执行此操作时,如果我没有其他任何与错误有关的操作。在我的触发器和“完成”脚本中,我通常只是通过电子邮件发送给我,加上我可以获得的所有当前状态。 –