테이블은 아래와 같이 thead > tr > th 로 header가 구성되어 있고, tbody > tr > td 로 body가 구성되어 있는 구조라고 가정함.

<table id="tbl">
<thead>
    <tr>
        <th>col_1</th>
        <th>col_2</th>
        <th>col_3</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td>cell_11</td>
        <td>cell_12</td>
        <td>cell_13</td>
    </tr>
    <tr>
        <td>cell_21</td>
        <td>cell_22</td>
        <td>cell_23</td>
    </tr>
</tbody>
</table>

 

// #tbl 테이블의 데이터를 csv로 다운로드
downloadCsv(document.getElementById('tbl'));
 
 
 
// 지정한 <table>의 데이터를 csv로 다운로드
function downloadCsv(tbl, filename)
{
    let csvString = '';
 
    // header
    const header = [];
    tbl.querySelectorAll('thead th').forEach((th)=>{
        header.push(`"${th.innerText}"`);
    });
    csvString += header.join(',') + "\n";
 
    // body
    tbl.querySelectorAll('tbody tr').forEach((tr)=>{
        const rowData = [];
        tr.querySelectorAll('td').forEach((td)=>{
            rowData.push(`"${td.innerText}"`);
        });
 
        csvString += rowData.join(',') + "\n";
    });
    csvString = csvString.trim();
 
    // download csv
    const blob = new Blob(["\ufeff" + csvString], {type: 'text/csv;charset=utf-8'});
    const csvUrl = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.setAttribute('style', 'display:none');
    a.setAttribute('href', csvUrl);
    a.setAttribute('download', filename);
    document.body.appendChild(a);
 
    a.click();
    a.remove();
}

 

 

 

 

 

 

Posted by bloodguy

댓글을 달아 주세요