2013-08-06 4 views
0

각 행의 첫 번째 셀에 chekBoxes가있는 FlexTable이 있는데, checkBox가 true이면 FlexTable 행의 데이터가 변수에 수집됩니다. 이제 변수의 데이터가있는 테이블을 포함하는 테이블로 문서를 만들어야합니다. 숨겨진 문자열 값을 저장하려고했지만 그것을 작동하지 않으며 그것을 실현하는 방법을 알아낼 수 없습니다. 내 모든 (비록 코드가 실제로 내 것이 아니지만, 코드는 거의 절반 @ Sergeinsas의 것입니다) 코드는 여기에서 사용 가능합니다 : http://pastebin.com/aYmyA7N2, 미리 감사하십시오.데이터 배열에서 문서를 만드는 방법

+0

언급 해 주셔서 감사합니다 :-) - 이것이 최종 목적이 무엇인지 말할 수 있습니까? 전자 메일을 보내거나 문서를 저장 하시겠습니까? –

+0

지금 당장은 문서를 저장하고 싶지만 앞으로는 HTML을 만들고 싶습니다. – askhat

+0

문서를 만드는 코드를 제안했지만 데이터 배열에서 직접 HTML을 빌드하는 것이 가능합니다. 복잡한 서식을 많이 사용하지 않으려면 처음부터 html을 만드는 것이 더 효율적일 것입니다. –

답변

1

코드에 오류가 있습니다 ... hidden과 같은 위젯은 문자열 값만 가질 수 있으며 값을 검색 할 때만 문자열 값을 반환 할 수 있습니다.

배열을 문자열로 변환하는 쉬운 방법 중 하나는 join()split()의 조합을 사용하는 것입니다. 여기서는 수정 된 코드 (관련 부분 만 해당)가 작동합니다.

// Storing checked rows 
function check(e) { 
    var checkedArray = []; 
    var data = sh.getRange(1,1,lastrow,lastcol).getValues(); 
    for(var n=0; n < data.length;++n){ 
    if(e.parameter['check'+n]=='true'){ 
     checkedArray.push(data[n].join(','));// convert data row array to string with comma separator 
    } 
    } 

    var hidden = app.getElementById('hidden'); 

    hidden.setValue(checkedArray.join('|'));// convert array to string with | separator 

    return app; 
} 

function click(e) { 
    var hiddenVal = e.parameter.hidden.split('|');// e.parameter.hidden is a string, split back in an array of strings, each string should be splitted too to get the original array of arrays 

    var d = new Date(); 
    var time = d.toLocaleTimeString(); 
    var table = [] 
    for(var n in hiddenVal){ 
    table.push(hiddenVal[n].split(','));// reconstruction of a 2D array 
    } 
    DocumentApp.create('doc '+time).getBody().appendTable(table);// the table is in the document 
} 

전체 코드 available here


편집 : 제안 : 스프레드 시트에 헤더를 넣을 경우이 같은 아주 쉽게 최종 테이블을 검색 할 수 있습니다 :

function check(e) { 
    var checkedArray = []; 
    var data = sh.getRange(1,1,lastrow,lastcol).getValues(); 
    checkedArray.push(data[0].join(','));// if you have headers in your spreadsheet, you could add headers by default 
    for(var n=0; n < data.length;++n){ 
    if(e.parameter['check'+n]=='true'){ 
     checkedArray.push(data[n].join(',')); 
    } 
    } 

당신 UI의 헤더를 빌드하는 doGet 함수에서 data[0]을 사용할 수도 있습니다. 이것이 코드를 작성한다고 생각합니다. 데이터의 하드 코딩없이 유지하기가 더 쉽습니다 .... 그러나 이것은 단지 제안 일뿐입니다 ;-)

관련 문제