2013-01-15 229 views
0

背景:我有一個谷歌的網站,我已經從包含我的學生的標記的谷歌電子表格中提取信息,但是我想,使其更動態,讓他們可以要求所有的報告當他們想要的時候標記。在我寫的腳本中,學生將輸入一個密碼,點擊一個按鈕,然後他們的標記將被生成。谷歌Apps腳本持久

問題:從我讀過,當他們按一下按鈕,該按鈕的處理程序導致要腳本重新運行。當前的電子表格不能存儲,當我嘗試訪問電子表格,它告訴我,這是空。我如何再次訪問電子表格?我試過使用ScriptProperties,但我得到了相同的結果。順便說一下,如果我不嘗試將它作爲web應用程序運行,它將起作用。

這裏的的doGet()函數,一旦UI上的按鈕被按下時調用的getPassword來()函數的一部分。

function doGet() { 
    var app = UiApp.createApplication(); 
    app.add(app.loadComponent("MyGui")); 

    var panel = app.getElementById("VerticalPanel1"); 
    var text = app.createPasswordTextBox().setName("text"); 
    var handler = app.createServerHandler("getResults").addCallbackElement(text); 

    panel.add(text); 
    panel.add(app.createButton("Get Record", handler)); 

    SpreadsheetApp.getActiveSpreadsheet().show(app); 
} 

function getResults(eventInfo) { 
    var app = UiApp.createApplication(); 
    var password = eventInfo.parameter.text; 

    var panel = app.getElementById("VerticalPanel1"); 
    var textArea = app.createRichTextArea(); 
    panel.add(textArea); 

    var pointsSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    var passwordCheckRange = pointsSheet.getRange("B70:C94").getValues(); 
    ... 

回答

0

的問題可能是,當腳本運行的web應用程序世界上沒有「activeSpreadSheet」 所以 SpreadsheetApp.getActiveSpreadsheet()getActiveSheet()。 失敗。另一種方法是將隱藏字段中的SpreadSheet ID傳遞給回調。

在你的doGet功能:

var hidden = app.createHidden('ssId', 'YOUR_SS_ID_HERE'); 
panel.add(hidden); 
var handler = app.createServerHandler("getResults").addCallbackElement(text); 
handler.addCallbackElement(hidden)` 

在你的回調函數

var ssID = eventInfo.parameter.ssId; 
var pointsSheet = SpreadsheetApp.openById(ssID).getSheetByName('SHEET_NAME'); 
+0

你並不需要通過ID作爲參數,這是一個恆定值,即可以在任何時刻。在另一方面web應用程序的doGet功能不應該結束「展(APP)」 –