我确定这是一个非常愚蠢的问题,但我花了一个小时用谷歌搜索,没有运气。
我在各种小部件中存储电子表格数据(一些文本,一些日期)。在某些时候,点击处理程序必须从窗口小部件读回文本或日期,并将其写入另一个电子表格。目前,我已经在FlexTable(或FlexTable中的Label小部件)中获得了数据。我现在发现(我认为)没有办法回读这些数据。
我有什么想法来解决这个问题?我只需要一个小部件,它可以让我存储数据,显示它,然后再读回来。
感谢。
修改
我认为答案实际上没有让我更进一步。我感谢我可以读取一些小部件的价值,如果它们作为回调传递给处理程序。但是,这似乎仅限于使用setName
方法的方法 - 这只是TextBox
和ListBox
吗?如果是这样,那是没用的,因为TextBox
是用户输入的。
那么,是否有一个小部件让我(脚本,而不是用户)存储数据,然后再读回来?或者我只是很厚?
答案 0 :(得分:1)
你没有很好的搜索,这里有很多例子......今天只发布了一个例子:Date AND Time picker Google App Script
和documentation,查看页面的(近)端...
答案 1 :(得分:1)
如果您在其标签中设置文字,您实际上可以从Label小部件中读取文本...
// Get Label text and set it to another label
function doGet() {
var app = UiApp.createApplication();
var panel = app.createVerticalPanel();
var label1 = app.createLabel('hello').setTag('hello').setId('label1');
Logger.log(label1.getTag()); // works
var label2 = app.createLabel('').setId('label2');
var handler = app.createServerHandler('myFunction').addCallbackElement(panel);
var btn = app.createButton('Get tag', handler);
panel.add(label1).add(label2).add(btn);
app.add(panel);
return app;
}
function myFunction(e) {
var app = UiApp.getActiveApplication();
Logger.log(app.getElementById('label1').getTag()) // doesn't work
var tag = e.parameter.label1_tag; // works
Logger.log(tag);
app.getElementById('label2').setText(tag); // Sets label2 text as label1 tag
return app;
}
您使用Label指定没有.setName()
,但它看起来像是自动创建的。
在您的情况下,将文本存储在与标签重合的不可见文本框内是另一种选择。
答案 2 :(得分:0)
看看https://developers.google.com/apps-script/uiapp#ServerHandlers 窗口小部件的值将传递给e.parameter中的服务器处理程序。不要忘记给出小部件名称和ID。如果您想获取不是触发事件处理的窗口小部件的值,那么您需要使用窗口小部件标记值传递数据