首先:这个网站对我已经有了很大的帮助,thnx很多!
在谷歌文档中,我添加了一个垂直面板来帮助用户撰写和发送信件。我在这个线程中使用了这个例子,它很好地显示了面板:
function onOpen() {
var app = UiApp.createApplication().setWidth(455).setTitle('User input')
var panel = app.createVerticalPanel().setStyleAttribute('padding','25px')
var label1 = app.createLabel('Your name please');
var box1 = app.createTextBox().setId('Field1').setName('Field1');
panel.add(label1)
panel.add(box1)
var pasteHandler = app.createServerChangeHandler('readTextbox');
pasteHandler.addCallbackElement(panel);
var clickButton=app.createButton('OK').setId('PasteTest').addClickHandler(pasteHandler)
panel.add(clickButton);
app.add(panel);
DocumentApp.getUi().showSidebar(app);
//I want to arrive here only after a value is entered in the panel
// ... follows more code ...
}
function readTextbox(e){
var app = UiApp.getActiveApplication();
var boxValue=e.parameter.Field1;
//how to get this e.parameter values (more than one..) to the main function
return app;
}
我的问题是:如何让主函数在"showSidebar"之后等待,直到输入值
第二个问题:如何在处理程序之外使用此输入,例如在文档中写入?我找到了一个变通方法,将字段写入处理程序中的电子表格,但这不是很优雅;-)
非常感谢。。。
你不能让onOpen()
函数等待,但你不需要。你有一个点击处理程序和readTextbox()函数。并且不需要获取readTextbox()函数就可以分支回onOpen()函数。如果根据用户的操作,存在需要分支到不同函数的条件,则可以创建一个新函数。
只需使用函数的名称、名称后的括号和分号,就可以从函数中调用函数。
function readTextbox(e){
var app = UiApp.getActiveApplication();
var boxValue=e.parameter.Field1;
anotherCoolFunction(boxValue);
//how to get this e.parameter values (more than one..) to the main function
return app;
}
function anotherCoolFunction(someArg){
Logger.log('Some Arg: ' + someArg);
}
在上面的代码中,输入名称并单击按钮后,运行readTextBox函数,然后readTextBox()
函数调用anotherCoolFunction(boxValue);
函数并将变量boxValue传递给anotherCoolFunction()
。
您可以通过查看日志来验证它是否有效。选择查看菜单和日志菜单项以显示日志输出。