따라서 엑셀 다운로드 구현 시에
ExcelJs를 사용하기로 결정함(무료로 많은 기능을 지원)
utils.sheet_to_json() : 엑셀 파일의 데이터를 Json 형식으로 변환💡 2개의 header가 존재하는데 별도로 처리하는 옵션이 없음! → 따라서
utils.sheet_to_json(rawData, { header: 1 })로 배열 데이터를 생성한 후에 상단에 2줄을 제거함 (data.slice(2))
import { read, utils } from "xlsx";
const readExcel = async (file) => {
const fileReader = new FileReader();
fileReader.readAsArrayBuffer(file);
fileReader.onload = (e) => {
if (!e.target) return;
const bufferArray = e.target.result;
const fileInformation = read(bufferArray, {
type: "buffer",
cellText: false,
cellDates: true,
});
const sheetName = fileInformation.SheetNames[0];
const rawData = fileInformation.Sheets[sheetName];
const data = utils.sheet_to_json(rawData, { header: 1 });
if (data.length >= 2) {
fileName = file.name;
handleExcelData(data);
} else {
alert("입력값이 올바르지 않습니다.");
}
isUploading = false;
};
};
const handleExcelFileChange = (e) => {
if (!e.target.files) return;
const file = e.target.files[0];
readExcel(file);
e.target.value = "";
};
<input
type="file"
id="input_file"
accept=".xls,.xlsx"
on:change={(e) => handleExcelFileChange(e)}
/>const workbook = new ExcelJS.Workbook(); // workbook 생성
const worksheet = workbook.addWorksheet('first sheet'); // worksheet 추가
workbook.removeWorksheet('sheet name' or index number); // worksheet 삭제
worksheet.columns = [
{ header: 'Id', key: 'id', width: 10 },
{ header: 'Name', key: 'name', width: 32 },
];
const headerStyle = {
alignment: { horizontal: "center" },
font: { bold: true },
fill: { type: "pattern", pattern: "solid", fgColor: { argb: "cce6ff" } },
};
worksheet.getRow(1).eachCell((cell) => {
cell.style = { ...headerStyle };
const data = [
{
id: 1,
name: 'Jamey',
},
{
name: 'Jimmy',
id: 2,
},
{
id: 3,
name: 'Jesus',
},
];
worksheet.insertRow(2, { id: 0, name: 'Jenny', DOB: '2020-11-11' });
worksheet.insertRows(3, data);