2013-06-18 39 views
7

從谷歌電子表格中運行谷歌應用程序腳本時,如果其中一個谷歌apis使用不正確,電子表格頂部會顯示一個紅色的「butterbar」錯誤。此消息通常包含對腳本開發人員有用的信息(來自google api的錯誤消息,例如「範圍的座標或維度無效」),但不一定對電子表格用戶(他們的真實世界翻譯可以做的解決它)。如何從Google應用程序腳本傳回自定義錯誤消息?

我通過UiApp api documentation搜索,但沒有看到自定義此消息的方式。是否有可能拋出自己的錯誤信息?

回答

18

與任何JavaScript,你可以使用:

try { 
    ... 
} 
catch (error) { 
    throw new Error("More meaningful error."); 
{ 

現在使用的這個numerous examples,即使這些問題不完全屬於你。

我個人認爲,如果你檢查你的函數的輸入並拋出錯誤(如this answer),而不是從服務調用中捕獲錯誤,那麼最好。如果您沒有實際的方法來驗證參數,那麼使用try..catch的適當時機就是在this answer中。

+0

謝謝!我不知道自定義異常會取代butterbar文本,這基本上就是我想要的。正如你所說,預先檢查以驗證傳遞給api的參數正是我計劃要做的。 –

+1

@Mogsdad,這確實非常有用,但是對於在服務器上啓動的功能。但是,如果使用google.script.run調用相同的函數,則會在控制檯中記錄拋出的錯誤。有沒有辦法解決這個問題,仍然在butterbar中顯示消息? – chibis

+0

@chibis,當腳本通過google.script.run被調用時,它被賦予它自己的執行實例。這就是我的想法,沒有嘗試過......「butterbar」是呈現給腳本或容器的用戶的UI的一部分,該腳本或容器是另一個執行實例,並且不可訪問google.script.run實例。儘管如此,這聽起來應該是一個問題,所以請繼續問問題! – Mogsdad

-1

您可以嘗試查看基類,以便在添加警報框或其他對話框的情況下與應用程序的用戶進行交互(如果它綁定到電子表格(例如msgBox()))。對於DocumentApp,使用Ui類與其接口進行交互。

我從來沒有嘗試過,但如果你使用try ... catch結構和throw語句,它也可以工作。

乾杯

薩科

2

以下是將腳本中的數據傳遞到錯誤消息中的最佳方法。首先設置一個全局變量對象來存儲錯誤處理所需的數據。然後將數據存儲到每個函數的try{}部分中的該對象。最後在catch(e)中調用一個將通過錯誤數據對象的errHandler函數。請參閱以下代碼:code.gs

var onErrObj = {} 
function myFunction(){ 

try{ 
    // function code goes here; 
    // add more elements to onErrObj as desired; 
}catch(e){ 
     onErrObj['data1'] = 'someData'; 
     onErrObj['data'] = 'some Other Data'; 
     errHandler(e,'myFunction'); 
} 

function errHandler(e,strFunc){ 
     var message = e.message+'\n in file: '+e.fileName+' on line: '+e.lineNumber; 
     var sendto = '[email protected]'; 
     var subject = 'My App encountered an error occured in '+strFunc; 
     var errProps = JSON.stringify(this.onError); 
     message = subject+'\n'+message+'\n onError: '+errProps; 
     GmailApp.sendEmail(sendto, subject, message); 
} 
相關問題