[jQgrid] Excel Export(2)
/** Excel Function
* @Param : Object, String*/
function AutoExcel($list, fileName) {
/* Get Data (loadComplete) */
const rows = $list.data('rows');
const colNames = $list.jqGrid('getGridParam', 'colNames');
const colModel = $list.jqGrid('getGridParam', 'colModel');
const headData = [];
/* Sort Data (Header) */
colModel.forEach((col, index) => {
/* Exclude No Data */
for (let i = 0; i < rows.length; i++) {
const row = rows[i];
if (!col.hidden && col.index !== undefined && row[col.index] !== undefined) {
headData.push({
key: col.index,
name: colNames[index]
});
break;
}
}
});
/* Set Table */
let excel = '<table border="1px"><tr>';
/* thead */
for (let key in headData) {
excel += `<th>${headData[key].name}</th>`;
}
excel += '</tr>';
/* tbody */
rows.forEach(row => {
excel += '<tr>';
for (let key in headData) {
const rowKey = headData[key].key;
let cell = row[rowKey];
/* check falsy value*/
if (cell === null || cell === undefined) cell = '';
excel += `<td style="mso-number-format:\\@">${String(cell)}</td>`;
}
excel += '</tr>';
});
excel += "</table>";
/* DownLoad */
const dataType = 'data:application/vnd.ms-excel;charset=utf-8';
const tableHtml = encodeURIComponent(excel);
const a = document.createElement('a');
a.href = dataType + ',%EF%BB%BF' + tableHtml;
a.download = fileName + '.xls';
a.click();
}
loadComplete에서 data를 담아논 후 넘기게 되면 현재 화면에서 보는 Grid 데이터를 그대로 엑셀로 반환받을 수 있다.
const rows = $list.data('rows');
Grid를 reload시키는 경우 해당 loadComplete에서 값이 변환될 수 있도록 담아주어야 한다.
formatter를 사용하여 값을 분기시키는 것보다 SQL에서 case when then을 사용하는 것에 더 적합하다고 생각한다.
기존에 있던 Excel Export 방식보다 자동이다.
Author And Source
이 문제에 관하여([jQgrid] Excel Export(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@danny0129/jQgrid-Excel-Export2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)