【问题标题】:Handling GAS Listbox multiple selection处理 GAS Listbox 多选
【发布时间】:2014-03-07 23:09:45
【问题描述】:

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

有人知道我该怎么做吗?

谢谢

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;  
}

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

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

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

    代码如下:

    (你也忘了给你的列表命名,这就是为什么你得到 length=undefined for 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
    }
    

    【讨论】:

    • 谢谢,使用 listitem 的 value 参数我能够解决它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多