如何使用Google Doc - GAS面板中输入的数据

时间:2014-09-06 17:59:08

标签: variables user-interface google-apps-script event-handling

首先:这个网站已经给了我很大的帮助,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'之后等待,直到输入一个值为止? 第二个问题:如何在处理程序之外使用此输入,例如写在文件中?我通过将字段写入处理程序中的电子表格找到了一种解决方法,但这不是很优雅;-)
非常感谢...

1 个答案:

答案 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}}。

您可以通过查看日志来验证它是否有效。选择“视图菜单”和“日志”菜单项以显示“日志输出”。