2013-08-05 27 views
0

我有一個FlexTable,它包含第一列的所有單元格中的複選框以及其他單元格中的其他數據。我需要存儲FlexTable的行時,checkBox是true隨後把它放在與DocumentApp.create('Doc').getBody().appendTable(storedRows)文件,我不知道如何實現此功能。 使用FlexTable時可能不可能? 無論如何謝謝你提前。從FlexTable存儲行

+0

您是如何構建Flex表的?你使用過HTML服務還是uiApp?你能包括你嘗試過的代碼嗎? –

+0

當然,順便說一句,這個表是在您的代碼http://pastebin.com/C70iymkg – askhat

+0

的幫助下構建的,您的新代碼(我的版本;-)也可以在此獲得:http://pastebin.com/hQ6JG4tc –

回答

0

如果您需要讀取複選框的值,則此複選框必須具有唯一的名稱,以便您可以使用e.parameter.widgetName獲取它。我在建立一個循環時所做的一切就是生成一個名稱,其中包含行號,因此我與數據有直接關係。

我重寫了您的代碼與此修改和其他一些....請看看並告訴我們,如果你需要更多的細節。

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