处理GAS列表框多选

时间:2014-03-07 12:11:25

标签: google-apps-script

我正在努力处理处理函数中的多选列表框。我的列表框条目包含逗号,理想情况下我想获取处理程序中所选项目的数组,但它似乎是一个单独的字符串。

有谁知道我怎么能这样做?

感谢

function doGet() {
...
var completedReportsList = app.createListBox(true)
.setId('list')
.addItem("Bloggs, Joe")
.addItem("Doe, Jane");
var generatePDFButton = app.createButton("Generate PDFs")
.setId("generatePDFButton");
var generatePDFButtonHandler = app.createServerClickHandler('generatePDF')
.addCallbackElement(completedReportsList)
generatePDFButton.addClickHandler(generatePDFButtonHandler);
...
}

function generatePDF(e) {
var app = UiApp.getActiveApplication();
Logger.log(e.parameter.list.length); // undefined
Logger.log(e.parameter.list); // <- how to parse multiple selected items?
return app;  
}

1 个答案:

答案 0 :(得分:1)

ListBox接受2个参数,“显示”值和“返回”值。第二个参数是可选的,如果不存在,则返回的值将成为显示的值。

是否可以将第二个字段与不包含逗号的值一起使用,例如使用|分隔符,以便您可以使用每个数组元素中的替换轻松地重建原始值吗?

代码如下:

(你也忘了给你的名单命名,这就是你为e.parameter.list获得长度=未定义的原因)

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

  var completedReportsList = app.createListBox(true)
  .setId('list').setName('list')
  .addItem("Bloggs, Joe","Bloggs| Joe")
  .addItem("Doe, Jane","Doe| Jane");// this could of course be obtained in the script with a .replace string method.
  var generatePDFButton = app.createButton("Generate PDFs").setId("generatePDFButton");
  var generatePDFButtonHandler = app.createServerClickHandler('generatePDF').addCallbackElement(completedReportsList);
  generatePDFButton.addClickHandler(generatePDFButtonHandler);
  app.add(completedReportsList).add(generatePDFButton)
  return app
}

function generatePDF(e) {
  var app = UiApp.getActiveApplication();
  Logger.log(e.parameter.list.split(',').length); // undefined
  var listValues = e.parameter.list.split(','); // an array of values
  for(var n in listValues){
    Logger.log(listValues[n].replace('|',','));
  }
  return app;  
}

这是一个修改版本,可以在doGet函数中自动创建备用字段:

function doGet() {
  var app = UiApp.createApplication().setTitle('test');
  var completedReportsList = app.createListBox(true).setId('list').setName('list');
  var items = ["Bloggs, Joe","Doe, Jane"];
  for(var n in items){
    item = items[n];
    modItem = items[n].replace(',','|');
    completedReportsList.addItem(item,modItem);
  }
  var generatePDFButton = app.createButton("Generate PDFs").setId("generatePDFButton");
  var generatePDFButtonHandler = app.createServerClickHandler('generatePDF').addCallbackElement(completedReportsList);
  generatePDFButton.addClickHandler(generatePDFButtonHandler);
  app.add(completedReportsList).add(generatePDFButton)
  return app
}