在UI处理程序中访问全局变量Google Spreadsheet Script

时间:2014-02-22 06:51:15

标签: google-apps-script google-sheets

我有一个简单但重要的问题。

我在我的脚本中声明了一个全局变量(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 个答案:

答案 0 :(得分:0)

这个全局变量的问题不是(仅)与处理函数有关。

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这样的其他解决方法,但是这个有很多优点,第一个恕我直言,你可以很容易地从脚本编辑器中看到值(文件/项目属性/项目属性< / em>)同时进行调试。