안녕하세요, 정태영입니다.
오늘은 데이터를 엑셀로 추출할 수 있는 exceljs에 대해 알아 보겠습니다!!
exceljs는 javascript에서 데이트를 엑셀로 추출하고 조작할 수 있는 라이브러리입니다.
관리자페이지에서 엑셀로 추출할 수 있고, db에 있는 데이터를 불러와 활용도 가능합니다.
const fruits = [
{
name: "오렌지",
price: "10000"
calorie: 85.8
},
{
name: "딸기",
price: "6000"
calorie: 54.8
},
{
name: "포도",
price: "4600"
calorie: 90.8
},
]
import { Workbook } from 'exceljs';
// 숫자 콤마 붙이기
const comma = (number) => {
number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")
}
router.get('/fruits', async (req, res) => {
const workbook = new Workbook();
const sheet = workbook.addWorksheet('');
const excelData = [];
for (let i = 0; i < fruits.length; i += 1) {
const { name, price, calorie } = fruits[i];
excelData.push([name, comma(price), `${calorie}kcal`]);
}
sheet.mergeCells('A1:C1');
sheet.getCell('A1').value = '과일 리스트';
sheet.getCell('A1').font = { size: 14, bold: true };
sheet.getCell('A1').alignment = { horizontal: 'center' };
sheet.getCell('A1').fill = {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: 'FFFFFF00' },
bgColor: { argb: 'FF0000FF' },
};
sheet.getRow(2).values = ['과일이름', '가격', '칼로리(kcal)'];
// 엑셀 리스트 삽입
sheet.addRows(excelData);
helper.excelSizeing(sheet);
res.setHeader('Content-Type', 'application/vnd.openxmlformats');
res.setHeader('Content-Disposition', `attachment; filename=과일리스트.xlsx`);
await workbook.xlsx.write(res);
res.end();
});
Data를 exceljs의 데이터 형식의 맞게 변환 해주었습니다.
addRows(excelData)
에 이중 배열로 넣어줍니다.
[
['셀 데이터1', '셀데이터2'], // 첫번 째 열
['셀 데이터1', '셀데이터2'], // 두번 째열
]
첫번 째 열은 제목을 넣기 위해,
mergeCells
이용하여 셀을 병합 해줍니다.
A1에 제목이 들어가 있기 때문에 다음열에 addRows
이용하여 마지막 데이터가 있는 밑에 추가 합니다.
addWorksheet('NAME')
: 시트 생성 및 추가mergeCells('A1:C1')
: 셀 병합 (A1-A3처럼 셀 지정할 수 있습니다.)getCell('A1')
: 셀 받아오기 (value, font, fill 등 셀 조작이 가능합니다.)getRow(5)
: 열 받아오기 (values이용하여 value를 각각 넣어 줄 수 있습니다.)exceljs이용하여 간단한 excel데이터로 출력 하였습니다.
간단하지만 조금이라도 도움이 되었으면 좋겠습니다.
감사합니다.
test