首先:这个网站已经给了我很大的帮助,thnx很多!
在Google文档中,我添加了一个垂直面板,以帮助用户撰写和发送信件。我使用this thread中的示例,它可以正常显示面板:
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'之后等待,直到输入一个值为止?
第二个问题:如何在处理程序之外使用此输入,例如写在文件中?我通过将字段写入处理程序中的电子表格找到了一种解决方法,但这不是很优雅;-)
非常感谢...
答案 0 :(得分:0)
您无法让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传递给{{ 1}}。
您可以通过查看日志来验证它是否有效。选择“视图菜单”和“日志”菜单项以显示“日志输出”。