2014-01-19 41 views
4

我很新的Javascript和谷歌的應用程序,但慢慢發現我的腳(的幫助)執行失敗:您沒有權限調用getProjectTriggers

我寫了一個腳本,做各種各樣的事情,的一部分這個腳本正在安裝一個觸發器。這裏是。

function setTrigger() { 
var ss = SpreadsheetApp.getActive(); 
var triggers = ScriptApp.getProjectTriggers(); 
Logger.log('Amount of triggers ' +triggers.length); 


var j = 0; 
for (var i = 0 ; i < triggers.length;i++){ 

if(triggers[i].getHandlerFunction() == 'getNotes'){j++;} 

} 

Logger.log('Amount of matching triggers ' +j); 

if(j == 0){ScriptApp.newTrigger("getNotes").forSpreadsheet(ss).onFormSubmit().create();} 
} 

這是我遇到的問題。

上面的代碼是所謂的觸發onOpen()。 當我打開工作表並檢查日誌時,我的觸發器未安裝,並且收到以下消息。

Execution failed: You do not have permission to call getProjectTriggers 

當我手動運行onOpen()。觸發器已安裝。

我目前擁有的電子表格,但理想情況下,我想與人分享,並觸發安裝和作品。

任何想法?

+0

當你說「上面的代碼被稱爲在的OnOpen()觸發」,你的意思是一個叫「的OnOpen」功能,或者您安裝了觸發和運行在開放的功能?請查看此文檔:https://developers.google.com/apps-script/understanding_triggers?hl=fr-FR#Simple –

+0

@Sergeinsas感謝您的回覆和鏈接。 我已經使用這個鏈接中的一些信息來構建我的腳本。 我的意思是我根據鏈接指令在腳本的頂部創建了一個名爲onOpen()的函數。 它建立一個菜單,然後檢查觸發器,如果​​沒有找到它應該安裝它。這裏是onOpen()代碼,我想我應該把它包括在第一位。http://jsfiddle.net/8gU9m/ – Munkey

回答

7

按照您的評論:

更改函數的名稱別的,並創建運行於SS打開此功能,在the doc提到的,簡單的觸發器不能做任何事情,需要授權的安裝觸發,但可以安裝的。

enter image description here

enter image description here


編輯:完整的示例與您的代碼

在電子表格中保存此手動設置觸發開放與specialonOpen功能(並接受委託後請求),我刷新了瀏覽器並使其與您的菜單和新觸發器一起工作(請參見下面的插圖 - 法語,因爲我使用了另一個帶有舊s的gmail帳戶preadsheet版本,我的英語水平有一個新版本的onFormSubmit不會在新版本一起使用)

function specialonOpen() { 
    var ss = SpreadsheetApp.getActive(); 

    var items = [ 
    {name: 'Refresh TOL Notes', functionName: 'getNotes'}, 
    null, // Results in a line separator. 
    {name: 'Coming Soon!', functionName: 'menuItem2'} 
    ]; 
    ss.addMenu('TOL Toolkit', items); 
    var sheet = ss.getSheetByName('New Notes'); 
    if (sheet == null) {var ss = SpreadsheetApp.getActive(); 
         ss.insertSheet('New Notes',0); 

         var sheet = ss.getSheetByName('New Notes'); 
         sheet.deleteColumns(3, 18); 
         sheet.deleteRows(12, 88); 
         sheet.getRange('a1').setValue('Agent Name'); 
         sheet.getRange('b1').setValue('Tol Notes'); 
         getNotes(); 

         sheet.setColumnWidth(1, 120); 
         sheet.setColumnWidth(2, 400); 
         setTrigger()    } 


    getNotes();   
    setTrigger() 
} 


function setTrigger() { 
    var ss = SpreadsheetApp.getActive(); 
    var triggers = ScriptApp.getProjectTriggers(); 
    Logger.log('Amount of triggers ' + triggers.length); 
    var j = 0; 
    for (var i = 0; i < triggers.length; i++) { 
    if (triggers[i].getHandlerFunction() == 'getNotes') { 
     j++; 
    } 
    } 
    Logger.log('Amount of matching triggers ' + j); 
    if (j == 0) { 
    ScriptApp.newTrigger("getNotes").forSpreadsheet(ss).onFormSubmit().create(); 
    } 
} 


function getNotes() { 
    var s = SpreadsheetApp.getActive(); 
    var sheet1 = s.getSheetByName('New Notes'); 
    if (sheet1 == null) { 
    var s = SpreadsheetApp.getActive(); 
    s.insertSheet('New Notes', 0); 
    var sheet1 = s.getSheetByName('New Notes'); 
    sheet1.deleteColumns(3, 18); 
    sheet1.deleteRows(12, 88); 
    sheet1.getRange('a1').setValue('Agent Name'); 
    sheet1.getRange('b1').setValue('Tol Notes');  
    sheet1.setColumnWidth(1, 120); 
    sheet1.setColumnWidth(2, 400); 
    } 
} 

enter image description here

enter image description here


編輯2:用瀏覽器消息的解決方案建議從菜單安裝。

function onOpen() { 
    var ss = SpreadsheetApp.getActive(); 

    var items = [ 
    {name: 'Install this script', functionName: 'setTriggers'}, 
    ]; 
    ss.addMenu('Custom Menu', items); 
    Browser.msgBox('please run INSTALL from the custom menu'); 
    } 
+0

@Sergeinas感謝您的回覆。 所以如果我理解正確。我應該將onOpen()重命名爲其他東西嗎? 然後通過腳本編輯器中的觸發菜單手動安裝觸發器。 所以沒有辦法通過腳本安裝觸發器?因爲這將需要授權(對不起,如果我在這兒愚蠢,但這是我的全部新) – Munkey

+0

沒有,該腳本可以創建觸發器,我說的是僅僅是將啓動您的OnOpen功能(實際上它的opOpen應該有另一個名字,正如我所解釋的)。告訴我,如果它不明確。 –

+0

嘿,我很抱歉,但它不是100%清楚:$如果你想放棄,我不會責怪你。我已經改變了我的代碼並將功能分開。 http://jsfiddle.net/33xRG/ 正如我已經改變了的OnOpen()來onMyOpen(),這不會,除非我手動設置它加載菜單。 setTrigger()在手動運行時工作,但在打開工作表時不起作用。 我希望做的,也許是不可能的,對板材的負荷:菜單創建。 getNotes()運行,然後檢查表單提交是否存在觸發器。 雖然我是張老闆,約5人使用他們和我希望將他們保存所有的時間與此有關。 – Munkey

相關問題