我有一个简单但重要的问题。
我在我的脚本中声明了一个全局变量(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;
}
答案 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>)同时进行调试。