2013-12-08 62 views
3

我有兩個組合框在單元格中的工作表中的範圍填充。當第一個變化時,我建立一個URL並致電:URLfetch在一個事件失敗

var resp = UrlFetchApp.fetch(url, {"method": "get","muteHttpExceptions":false}); 

並且它填充控制第二個組合框的第二個範圍。這在調試模式下工作得很好。但我的目標是使用onEdit模式工作。如果第一個組合框更改,則該方法運行並填充第二個。使用此聲明:

mydoc.getActiveSheet().getRange(15, 1).setValue("Some debug message"); 

我把它放在整個方法,看它死去。我在UrlFetchApp.fetch()方法之後立即聲明瞭一個從未寫入的方法,所以我知道這是問題所在。你可以在事件期間進行這些類型的呼叫嗎?

再說一遍,它可以很好地通過腳本編輯器手動運行它,但不能從onEdit調用。

我看到this question他們不允許它,但在線程中的最後一條評論說,他通過將另一個自定義方法附加到onEdit來得到它的工作。我從另一種方法調用URLFetchApp,但我嘗試創建一個myOnEdit函數,並從那裏調用URLFetchApp,但仍然失敗。不知道他是什麼意思手動連接到事件...

回答

12

使用一個簡單的觸發器:

function onEdit(e) { 
    var response = UrlFetchApp.fetch('http://www.google.com/'); 
    Logger.log(response.getContentText()); 
} 

我碰到下面的錯誤(查看 - >執行紀錄):

Execution failed: You do not have permission to call fetch (line 2, file "Code") [0.008 seconds total runtime] 

一種可能的解決方法是創建一個可安裝的觸發器:

function myOnEdit(e) { 
    var response = UrlFetchApp.fetch('http://www.google.com/'); 
    Logger.log(response.getContentText()); 
} 

/* 
In the Spreadsheet, create new trigger: 
Run: myOnEdit 
Events: From spreadsheet 
On edit 
*/ 
+1

優秀。當你發佈它時,我正在閱讀所有這些內容。我從來沒有使用'執行記錄'。學到了兩件新東西,謝謝! – Nathan

+0

還要確保你配置自定義onEdit函數myOnEdit作爲觸發器。在編輯觸發器上,轉到資源>所有觸發器,添加新觸發器,設置函數名稱,事件:從電子表格開始 –