首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从FlexTable存储行

从FlexTable存储行
EN

Stack Overflow用户
提问于 2013-08-05 11:35:25
回答 1查看 899关注 0票数 0

我有一个FlexTable,它在第一列的所有单元格中包含checkBoxes,在其他单元格中包含其他数据。当checkBox为真时,我需要存储FlexTable的行,以便随后将其与DocumentApp.create('Doc').getBody().appendTable(storedRows)放在文档中,而且我不知道如何实现此功能。也许当使用FlexTable时是不可能的?不管怎样,先谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-05 15:23:54

如果您需要读取checkBox的值,这个checkBox必须有一个唯一的名称,以便您可以使用e.parameter.widgetName获得它。在循环中构建时,我通常要做的是生成一个名称,其中包含行号,这样我就与数据有了直接的关系。

我用这个修改和其他一些修改重写了你的代码..。请看一看,如果需要更多的细节,请告诉我们。

代码语言:javascript
复制
// Global variables
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet(); 
var data = sh.getDataRange().getValues();
var app = UiApp.getActiveApplication();

// Menu additions
function onOpen() {
  var menuEntries = [{name: 'Поиск вакансий', functionName: 'ui'}];
  ss.addMenu('Отчеты',menuEntries);
}

// UI
function ui() {  
  var app = UiApp.createApplication().setHeight(400).setWidth(800).setTitle('Поиск вакансий');
  var panel = app.add(app.createHorizontalPanel());
  var input = panel.createTextBox().setName('input').setId('input').setFocus(true);
  var button = panel.createButton('Сформировать документ');
  panel.add(input).add(button);

  var handler = app.createServerHandler('search');
  input.addChangeHandler(handler);
  handler.addCallbackElement(input);

  var click = app.createServerHandler('click');
  button.addClickHandler(click);
  click.addCallbackElement(button);// this is useless, the button has no data to transmit ?

  var table = app.createFlexTable().setId('table').setWidth(785).setBorderWidth(1).setCellPadding(1)
  var tpanel = app.createScrollPanel(table).setPixelSize(800, 383).setAlwaysShowScrollBars(true);
  table
    .setWidget(0,0,app.createCheckBox().setValue(true).setEnabled(false))
    .setWidget(0,1,app.createLabel('Вакансия'))
    .setWidget(0,2,app.createLabel('График'))
    .setWidget(0,3,app.createLabel('Время'))
    .setWidget(0,4,app.createLabel('Условия'))
    .setWidget(0,5,app.createLabel('Зарплата'))
    .setWidget(0,6,app.createLabel('Оплата'))
    .setWidget(0,7,app.createLabel('Организация'))
    .setWidget(0,8,app.createLabel('Телефон'));
  app.add(tpanel);
  ss.show(app);
}

// Search
function search(e) {
  var table = app.getElementById('table');

  var query = e.parameter.input.toLowerCase();

  var hidden = app.createHidden().setId('hidden').setName('hidden');
  app.add(hidden);// set a name too but I don't use it right now

  var check = app.createServerHandler('check');
  check.addCallbackElement(table);

  var r = 1;
  for (var row = 0; row < data.length; row++) {
      if(data[row].toString().toLowerCase().match(query) == query && query!= ''){ // you don't need to check each cell, you can use match on the stringified row instead.
        table.setWidget(r,0,app.createCheckBox().addValueChangeHandler(check).setName('check'+row));// create the checkBow once every row if condition is true and give it a name
        for (var c = 1; c < data[row].length; ++c) {
          table.setText(r,c,data[row][c].toString());
        }
        ++r
        continue;
      }
  }
  return app;
}

// Storing checked rows
function check(e) {
 var checkedArray = [];
  for(var n=0; n < data.length;++n){
    Logger.log('check'+n+' = '+e.parameter['check'+n]);// shows also 'undefined' for items not found by input query, that's normal
    if(e.parameter['check'+n]=='true'){
      checkedArray.push(data[n]);
    }
  }
  Logger.log('checkedArray = '+checkedArray);// see results
}

function click(e) {
  // no action right now
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18057158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档