谷歌应用程序脚本TextBox值未传递给e.parameter.TextBoxName

时间:2012-10-11 02:40:35

标签: google-apps-script

在下面的代码中,我定义了一个名称和id的TextBox。按钮处理程序工作正常,但我无法获得在TextBox上输入的值。 msgBox显示但e.parameter.matchValue显示为undefined

在应用程序的其他部分,我有相同的逻辑,但有一个ListBox,它工作正常。

我做错了什么?

function chooseColumnValueToMatch() {
  var app = UiApp.createApplication().setHeight(150).setWidth(250);
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var columnName = ScriptProperties.getProperty("columnNameToMatch");

  var h1Line = app.createHTML("<h2>Value to match "+columnName+":</h2>");
  var textPara = app.createHTML("<p>Type the VALUE that the <b>"+columnName+"</b> column must match EXACTLY to send the message.</p>");
  var selectionHandler = app.createServerHandler('chooseColumnValueToMatchSelectionHandler');
  var valueInputBox = app.createTextBox()
      .setTitle("Match value for "+columnName)
      .setName("matchValue")
      .setId("matchValue");
  var submitBtn = app.createButton("Submit", selectionHandler);

  app.add(h1Line)
    .add(textPara)
    .add(valueInputBox)
    .add(submitBtn);
  ss.show(app);
}
function chooseColumnValueToMatchSelectionHandler(e){
  var app = UiApp.getActiveApplication();
  var columnName = ScriptProperties.getProperty("columnNameToMatch");

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var msg = e.parameter.matchValue;

  Browser.msgBox("Value to match "+columnName+" column is:", msg, Browser.Buttons.OK);

  return app;
}

2 个答案:

答案 0 :(得分:6)

您必须使用ServerHandler.addCallbackElement方法。以下代码演示了它。方法调用“告诉”GAS内部,指向作为参数的小部件的值应该传递给处理程序。

如果你有多个小部件,应由处理程序处理,那么,不是用每个小部件调用addCallbackElement,而是可以将所有控件放到面板上,只将面板指向{{{ 1}}方法参数。 the point 4.4 of this tutorial中的代码以这种方式显示。

addCallbackElement

答案 1 :(得分:2)

您似乎忘记将callbackElement添加到处理程序

你可以这样试试:

selectionHandler.addCallbackElement(valueInputBox)

在submitBtn定义之后