如何将最后一项添加到上一项下面的flextable return?

时间:2012-11-20 05:18:10

标签: google-apps-script

有人可以告诉我如何将最后一项添加到flextable直接放在现有项目下面吗?

function doGet() {
  var app = UiApp.createApplication();
  var listBox = app.createListBox();
  listBox.addItem("item 1").addItem("item 2").addItem("item 3").setName("myListBox");

  var handler = app.createServerHandler("buttonHandler");
  // pass the listbox into the handler function as a parameter
  handler.addCallbackElement(listBox);

  var table = app.createFlexTable().setId("myTable");

  var button = app.createButton("+", handler);
  app.add(listBox);
  app.add(button);
  app.add(table);
  return app;
}

function buttonHandler(e) {
  var app = UiApp.getActiveApplication();
  app.getElementById("myTable").insertRow(0).insertCell( 0, 0).setText( 0, 0, e.parameter.myListBox);
  return app;
}

2 个答案:

答案 0 :(得分:0)

我们的想法是在内存中保留您写入的行的索引。可以使用很多方法来实现这一点,但最简单的可能就是在表或listBox标签中写这个行索引,就像这样(我没有测试代码,但希望我没有犯错误):


编辑:标签解决方案似乎无法正常工作,因此我更改为hidden widget解决方案。(已测试)

function doGet() {
  var app = UiApp.createApplication();
  var listBox = app.createListBox();
  listBox.addItem("item 1").addItem("item 2").addItem("item 3").setName("myListBox");
  var hidden = app.createHidden().setName('hidden').setId('hidden')
  var handler = app.createServerHandler("buttonHandler");
  // pass the listbox into the handler function as a parameter and the hidden widget as well
  handler.addCallbackElement(listBox).addCallbackElement(hidden);

  var table = app.createFlexTable().setId("myTable");

  var button = app.createButton("+", handler);

  app.add(listBox).add(button).add(table).add(hidden);// add all widgets to the app
  return app;
}

function buttonHandler(e) {
  var app = UiApp.getActiveApplication();
  var pos = e.parameter.hidden;// get the position (is a string)
   if(pos==null){pos='0'};// initial condition, hidden widget is empty
   pos=Number(pos);// convert to number
  var table = app.getElementById("myTable")
  table.insertRow(pos).insertCell( pos, 0).setText(pos, 0, e.parameter.myListBox);// add the new item at the right place
  ++pos ;// increment position
  app.getElementById('hidden').setValue(pos);// save value
  return app;// update app
}

答案 1 :(得分:0)

下面的代码也是这样做的,但是使用了ScriptProperties方法。没什么好看的,就像魅力一样:

function doGet() {
  var app = UiApp.createApplication();

  // create listBox and add items
  var listBox = app.createListBox().setName("myListBox")
    .addItem("item 1")
    .addItem("item 2")
    .addItem("item 3");

  // set position
  ScriptProperties.setProperty('position', '0'); 

  // create handle for button
  var handler = app.createServerHandler("buttonHandler").addCallbackElement(listBox);

  // create flexTable and button
  var table = app.createFlexTable().setId("myTable");
  var button = app.createButton("+", handler);

  // add all to application
  app.add(listBox)
    .add(button)
    .add(table);

  // return to application
  return app;
}

function buttonHandler(e) {
  var app = UiApp.getActiveApplication();

  // get position
  var position = parseInt(ScriptProperties.getProperty('position'),10);

  // get myTable and add 
  app.getElementById("myTable").insertRow(position).insertCell(position, 0).setText(position, 0, e.parameter.myListBox);

  // increment position
  var newPosition = position++;

  // set position  
  ScriptProperties.setProperty('position', newPosition.toString()); 

  // return to application
  return app;
}

请对代码进行解密,以便启动授权过程。

参考:Script and User Properties