2012-05-11 292 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所以我不必打開腳本日誌來查看堆棧。它就在信息上。當然,只有在堆棧中的最後一個函數上執行此操作時,如果我沒有其他任何與錯誤有關的操作。在我的觸發器和「完成」腳本中,我通常只是通過電子郵件發送給我,加上我可以獲得的所有當前狀態。 –