0

我会尽量保持简短。我正在尝试在谷歌电子表格中制​​作一个谷歌网络应用程序,允许我输入最小值和最大值。

我已经能够创建 GUI 并将其添加到面板中。但我似乎无法将输入的整数传递给另一个函数。我已经尝试了所有方法,我对创建 Google Script 比较陌生,所以如果这遇到了一个小问题,我很抱歉。

这是到目前为止的所有代码:

function onOpen() {
  var ss = SpreadsheetApp.getActive();
  var menuEntries = [];
  menuEntries.push({name: "Open Dialog", functionName: "showDialog"});
  ss.addMenu("Min/Max", menuEntries);
}


//creating a panel to add the min and max of low to high for scoring
function showDialog() {  
  max = 10;
 var app = UiApp.createApplication();
 app.setTitle("My Applicaition");
  var panel = app.createVerticalPanel();
  var textBox = app.createTextBox();
  var label = app.createLabel("Set the min value for 'Low'");
  //had to create a hidden element with id="min" for a global value that can be updated
  var min = app.createHidden().setValue('0').setName('min').setId('min');
  textBox.setName('myTextBox').setId('myTextBox');
  var button = app.createButton('Submit');
  panel.add(label);
  panel.add(textBox);
  panel.add(min);
  panel.add(button);


  //click handler for setting the value of min to the new value
  var clickHandler = app.createServerClickHandler("responedToSubmit");
  button.addClickHandler(clickHandler);
  clickHandler.addCallbackElement(panel);
  app.add(panel);

  var doc = SpreadsheetApp.getActive();
  doc.show(app);
}

function responedToSubmit(e) {  
  var app = UiApp.getActiveApplication();
  var textBoxValue = e.parameter.myTextBox;
    Logger.log(e.parameter.min);
  if (typeof textBoxValue != "number") {
     var num = parseInt(textBoxValue);
     app.getElementById('min').setValue(num);
     Logger.log("textBoxValue is = "+textBoxValue+"\n min value is = "+e.parameter.min);
  } else {
    throw "value needs to be set as number";
  }
  return app.close();
}

这是我认为事情没有按计划进行的地方:

function responedToSubmit(e) {  
  var app = UiApp.getActiveApplication();
  var textBoxValue = e.parameter.myTextBox;
    Logger.log(e.parameter.min);
  if (typeof textBoxValue != "number") {
     var num = parseInt(textBoxValue);
     app.getElementById('min').setValue(num);
     Logger.log("textBoxValue is = "+textBoxValue+"\n min value is = "+e.parameter.min);
  } else {
    throw "value needs to be set as number";
  }
  return app.close();
}

我发现每次测试 .setValue() 都不会更新“min”的值,我不明白为什么。你能帮忙吗?

4

1 回答 1

0

您需要将 textBox 元素添加到 clickHandler 的回调元素列表中。尝试这个:

//click handler for setting the value of min to the new value
var clickHandler = app.createServerClickHandler("responedToSubmit");
clickHandler.addCallbackElement(panel);
clickHandler.addCallbackElement(textBox);
button.addClickHandler(clickHandler);
app.add(panel);
于 2013-06-12T16:42:53.420 回答