Javascript/[중요] Javascript
Excel파일 웹에서 Table로 표현
마샤와 곰
2019. 6. 18. 16:30
xlsx파일을 읽어서 웹에서 표출하는 방법은 Sheetjs라는 라이브러리를 사용하면 편리하게 구현 가능 하다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="excel.min.js"></script>
</head>
<body class='container'>
<input type='file' id='file'/>
<div id='grid'></div>
</body>
</html>
<script>
function gridExcelToWeb(file, target){
var reader = new FileReader();
reader.onload = function (evt) {
if (evt.target.readyState == FileReader.DONE) {
var data = evt.target.result;
data = new Uint8Array(data);
var workbook = XLSX.read(data, { type: 'array' });
var sheetName = '';
workbook.SheetNames.forEach( function(data, idx){ //시트이름은 1개만 했다. 반복문을 돌리면 여러개를 그린다.
if(idx == 0){
sheetName = data;
}
});
var toHtml = XLSX.utils.sheet_to_html(workbook.Sheets[sheetName], { header: '' });
target.html(toHtml);
}
};
reader.readAsArrayBuffer(file);
}
$('#file').change( function(){
const selectedFile = $(this)[0].files[0];
gridExcelToWeb(selectedFile, $('#grid'))
});
</script>
위 예제코드는 input type file에서의 예제코드이다.
ajax로 바꾸는것도 어렵지는 않다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="excel.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body class='container'>
<input type='file' id='file'/>
<div id='grid'></div>
</body>
</html>
<script>
function gridExcelToWeb(file, target){
var reader = new FileReader();
reader.onload = function (evt) {
if (evt.target.readyState == FileReader.DONE) {
var data = evt.target.result;
data = new Uint8Array(data);
var workbook = XLSX.read(data, { type: 'array' });
var sheetName = '';
workbook.SheetNames.forEach( function(data, idx){ //시트 이름은 1개만 했다. 반복문 돌리면 여러개의 시트를 그린다.
if(idx == 0){
sheetName = data;
}
});
var toHtml = XLSX.utils.sheet_to_html(workbook.Sheets[sheetName], { header: '' });
target.html(toHtml);
target.find('table').attr({class:'table table-bordered',id:'excelResult'});
}
};
reader.readAsArrayBuffer(file);
}
$.ajax({
url: 'excel.xlsx',
cache: false,
contentType: 'application/x-www-form-urlencoded;',
success: function(data) {
console.log(data);
gridExcelToWeb(selectedFile, data)
},
error : function (err){
console.log(err);
}
});
</script>
workbook에 메타데이터를 활용하면 여러 형태로 가공이 편리하다.
반응형