From fa183e7e305ff280e81cbc73274af0503efd1a5e Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Wed, 8 Jan 2025 16:25:15 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A3=BC=EC=86=8C=EB=A1=9D=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EC=97=91=EC=85=80=20.xls=20=ED=99=95=EC=9E=A5?= =?UTF-8?q?=EC=9E=90=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=9D=B4=EB=AA=A8?= =?UTF-8?q?=EC=A7=80=20=EC=A0=9C=EA=B1=B0=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/WEB-INF/decorators.xml | 1 + .../jsp/web/addr/include/addrListforExcel.jsp | 48 +++++++++++++++++-- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/main/webapp/WEB-INF/decorators.xml b/src/main/webapp/WEB-INF/decorators.xml index 38c86778..45c14db5 100644 --- a/src/main/webapp/WEB-INF/decorators.xml +++ b/src/main/webapp/WEB-INF/decorators.xml @@ -48,6 +48,7 @@ */rss.do* */SE2.2.1.O9186/* */publish/* + */public/* */pb/* *mageEditor* diff --git a/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp b/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp index e33ea0e7..7746027f 100644 --- a/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp @@ -152,16 +152,32 @@ function excelFileChange(file) { fn_loadAddActive(); var reader = new FileReader(); var extension = file.name.split('.').pop().toLowerCase(); - reader.onload = function(e) { + console.log('extension : ', extension); + reader.onload = function (e) { setTimeout(() => { // 파일 읽기 완료 후 실행되도록 함 if (extension === 'xlsx') { var data = new Uint8Array(e.target.result); - var workbook = XLSX.read(data, {type: 'array'}); + var workbook = XLSX.read(data, { type: 'array' }); var firstSheet = workbook.Sheets[workbook.SheetNames[0]]; - var jsonData = XLSX.utils.sheet_to_json(firstSheet, {header: 1}); + var jsonData = XLSX.utils.sheet_to_json(firstSheet, { header: 1 }); + console.log('xlsx jsonData : ', jsonData); + processExcelData(jsonData); + } else if (extension === 'xls') { + console.log('xls extension detected'); + var data = e.target.result; + var workbook = XLSX.read(data, { type: 'binary' }); + var firstSheet = workbook.Sheets[workbook.SheetNames[0]]; + var jsonData = XLSX.utils.sheet_to_json(firstSheet, { header: 1 }); + console.log('xls jsonData : ', jsonData); + + // 문제 데이터를 확인하는 함수 호출 + findInvalidDBCharacters(jsonData); + + processExcelData(jsonData); } else if (extension === 'txt') { var textData = e.target.result; + console.log('txt data : ', textData); processTextData(textData); } else { alert('지원되지 않는 파일 형식입니다.'); @@ -171,14 +187,40 @@ function excelFileChange(file) { }; if (extension === 'xlsx') { reader.readAsArrayBuffer(file); + } else if (extension === 'xls') { + reader.readAsBinaryString(file); // xls 파일에 적절한 read 메서드 호출 } else if (extension === 'txt') { reader.readAsText(file); + } else { + alert('지원되지 않는 파일 형식입니다.'); } } } +//문제 데이터를 확인하는 함수 +function findInvalidDBCharacters(jsonData) { + console.log('DB 입력 값 검사 중...'); + const invalidCharPattern = /[\uD800-\uDBFF][\uDC00-\uDFFF]/; // 4바이트 유니코드 문자 (이모지 등) + for (let rowIndex = 0; rowIndex < jsonData.length; rowIndex++) { + const row = jsonData[rowIndex]; + if (Array.isArray(row)) { + for (let colIndex = 0; colIndex < row.length; colIndex++) { + const cell = row[colIndex]; + if (typeof cell === 'string' && invalidCharPattern.test(cell)) { + console.warn('허용되지 않는 문자: row', rowIndex + 1,', col ', colIndex + 1, ', value:', cell); + // 허용되지 않는 문자를 제거 (선택 사항) + row[colIndex] = cell.replace(invalidCharPattern, ''); + console.log('수정된 값:', row[colIndex]); + } + } + } + } +} + + // 엑셀 데이터 처리 함수 function processExcelData(data) { + console.log('processExcelData: ', processExcelData); var keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; var tableData = []; var totalRows = data.length - 2; // 전체 데이터 수 (1, 2행 제외)