언어의 온도/javascript&jquery
DataTable json 엑셀다운로드
개귀개
2023. 3. 22. 13:10
* 데이터테이블(DataTable) 에서 바로 ajax 처리하는경우 엑셀 다운로드를 붙여보자
▶ 엑셀다운로드 버튼 생성
<button type="button" class="btn btn-default float-right" id="btn-excelDown">엑셀다운로드</button>
▶ initComplete 콜백 함수를 활용하여 처리
( DataTable이 초기화되고 데이터가 로드된 후 실행될 콜백 함수를 지정합니다. 이 콜백 함수에서는 데이터 로드 후 실행할 로직을 구현가능 )
//엑셀다운로드 배열필드
let sheet_js = "";
let results = "";
let list = $('#listTable').DataTable({
ajax : {
'type' : 'POST',
'url' : 'listAjax.do',
'dataSrc': ''
},
columns : [
{ 'data' : 'id', 'defaultContent': '', 'width': '15%' },
{ 'data' : 'name', 'defaultContent': '', 'width': '10%' },
{ 'data' : 'siteCode', 'defaultContent': '', 'width': '5%' },
{ 'data' : 'joinFlag', 'defaultContent': '', 'width': '10%' },
{ 'data' : 'bName', 'defaultContent': '', 'width': '10%' },
{ 'data' : 'memberDate', 'defaultContent': '', 'width': '10%' },
{ 'data' : 'loginDate', 'defaultContent': '', 'width': '10%' },
{ 'data' : 'mailingYN', 'defaultContent': '', 'width': '10%'},
{ 'data' : 'agreeYN', 'defaultContent': '', 'width': '10%'}
],
columnDefs : [
{ 'targets' : '_all', 'className' : 'text-center' }
],
'initComplete': function(settings, json) {
//json 가공 엑셀다운로드 전용
let results = json.map(function(item) {
//PC M 구분 가공 처리
let site_str = "";
if( item.siteCode === "CODE_1" ) site_str = "PC";
if( item.siteCode === "CODE_2" ) site_str = "M";
return { '번호': item.idx, '아이디': item.id,
'이름': item.name, 'PCㆍM구분': site_str,
'가입방법': item.joinFlag, '가입지역': item.bName,
'가입일': item.memberDate, '최근로그인': item.loginDate,
'메일링동의': item.mailingYN, '제3자동의': item.agreeYN
};
});
//json sheetjs 처리
sheet_js = XLSX.utils.json_to_sheet(results);
}
});
▶ 엑셀 다운로드 버튼 클릭
//엑셀 다운로드 sheetjs 참조
$('#btn-excelDown').click(function() {
let wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, sheet_js, "Sheet1");
//엑셀 파일생성
XLSX.writeFile(wb, ('다운로드.xlsx'));
});
참~쉽죠잉~