언어의 온도/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'));

});
 

 

 

참~쉽죠잉~