2014-02-22 37 views
0

我有一個簡單的但是導入的問題。訪問UI處理程序中的全局變量Google電子表格腳本

我在腳本中聲明瞭一個全局變量(Google Spreadsheet Script)。接下來,我正在從SS腳本調用一個UI應用程序。它有一個列表框和一個按鈕。它顯示很好。

當我點擊按鈕時,它應該把選定的值放到全局變量中。問題出在處理函數中(單擊(eventInfo)),它不能識別全局變量(SELNAME)。我該如何克服這一點?

//global variable 
var SELNAME; 

function show() { 
var doc = SpreadsheetApp.getActiveSpreadsheet(); 
var app = UiApp.createApplication().setTitle('My Application'); 
var panel = app.createVerticalPanel(); 
var lb = app.createListBox(true).setId('myId').setName('myLbName'); 


// add items to ListBox 
lb.setVisibleItemCount(8); 

lb.addItem("one"); 
lb.addItem("two"); 
lb.addItem("three"); 

panel.add(lb); 
var button = app.createButton('press me'); 
var handler = app.createServerClickHandler('click').addCallbackElement(panel); 
button.addClickHandler(handler); 
panel.add(button); 
app.add(panel); 
doc.show(app); 
} 


function click(eventInfo) { 
var app = UiApp.getActiveApplication(); 
// get values of ListBox 
var value = eventInfo.parameter.myLbName; 
// multi select box returns a comma separated string 
var n = value.split(','); 

var doc = SpreadsheetApp.getActiveSpreadsheet(); 

SELNAM =value; 

return app; 
} 

回答

1

你有這個全局變量的問題不(僅)相關處理函數。

Google Apps腳本中的全局變量不能從函數內部修改,它們只能被讀爲常量。

壞消息?不是真的,因爲有很多可能的解決方法的......

一種可能的方式來獲得預期的行爲是使用scriptProperties到useProperties從相同的服務存儲的「全球」值(或者,如果你想,這個值遺體在你需要訪問或修改它只是利用這個任意功能

ScriptProperties.setProperty(key, value); 

然後:

你的函數的私人給你)

外,您可以將值分配給您的鑰匙這樣

var value = ScriptProperties.getProperty(key);// to get the value 
// do something with that value... 
ScriptProperties.setProperty(key, value);// to update the value 

當然也有其他的解決辦法像hidden widgets in the Ui,但是這一個有很多優點,第一個是恕我直言,你可以很容易地看到從腳本編輯器的值(文件/項目屬性/項目屬性),而調試。

+1

ScriptProperties類現在已被**棄用**。 – Liyali

+0

的確...用PropertiesService.getScriptProperties()替換setProperty(key,value) –

相關問題