1. 플러그인
- ExcelJS : 소스만봐도 어떤 기능인지 금방 파악할 수 있을 정도로 사용하기 간편하게 구성되어 있고, 공식문서 또한 잘 정리되 있어 참고하며 혼자 개발하기에도 좋다.
ExcelJS 공식문서 : https://github.com/exceljs/exceljs
GitHub - exceljs/exceljs: Excel Workbook Manager
Excel Workbook Manager. Contribute to exceljs/exceljs development by creating an account on GitHub.
github.com
- file-saver : ExcelJS에는 엑셀파일을 생성 후 파일로 추출하는 기능이 없기때문에 파일을 추출할 수 있는 라이브러리를 추가해주어야 한다.
- 설치 : 터미널에서 각각 npm i exceljs / npm i file-saver 를 입력해서 설치하도록 하자.
2. 엑셀 만들기
- excel.js 파일생성 : common 폴더를 만들고 해당 폴더에 excel.js 파일을 생성하여 아래와 같이 ExcelJS와 file-saver 를 import 하였다.

1) 워크북 생성하기
const workbook = new ExcelJS.Workbook();
이렇게 워크북을 생성하면 그 위에 시트를 생성하고 데이터를 삽입할 수 있다.
2) 시트 생성하기
let worksheet = workbook.addWorksheet('TestSheet');
이렇게 시트를 추가하면 아래의 이미지처럼 시트가 생성되는 것이다.

3) 컬럼 추가하기
엑셀에 데이터를 입력한다고 생각해보자, 아래 이미지처럼 일반적으로 행과 열로 구분되어 컬럼명을 기준으로 데이터를 입력할 것이다.

이 중, 컬럼은 이름과 나이 직업에 해당할 것이다.
ExcelJS는 컬럼에 대한 속성과 값을 지정해줘야 데이터를 쓸 수 있도록 설계되어 있다.
아래와 같이 컬럼을 추가해보자, 데이터는 객체로 구성된 배열을 전달해줘야 한다.
worksheet.columns = [
{
header: '이름',
key: 'name',
width: 12,
},
{
header: '나이',
key: 'age',
width: 12,
},
{
header: '직업',
key: 'job',
width: 12,
},
];
header 는 컬럼명이 되고 key는 데이터(rows)를 입력할 때의 키값이 되며 이외에도 다양한 속성이 있으나 간단하게 width로 행 넓이까지 추가해 보았다.
4) 데이터(rows) 추가하기
위에서 지정한 컬럼에 데이터를 입력해 줄 차례이다.
insertRows 메서드에 대한 ExcelJS의 공식문서를 살펴보자.

첫번째 파라미터는 몇번째 열부터 데이터를 입력할지에 대한 number 값 인자를 받는다.
공식문서 설명에는 없지만, 1번 열의 index가 1부터 시작한다. 2열부터 rows를 입력할 것이기 때문에 첫번째 인자값은 2를 주었고, style은 필수값이 아니기에 지금은 빼도록 한다.
worksheet.insertRows(2, [
{
name: '아이유',
age: 20,
job: '개발자',
},
{
name: '권나라',
age: 23,
job: '디자이너',
},
{
name: '문가영',
age: 22,
job: '퍼블리셔',
},
{
name: '수지',
age: 21,
job: '기획자',
},
]);
3. 파일 내보내기
이렇게 기본적으로 데이터가 갖추어진 시트가 완성되었지만, 아쉽게도 ExcelJS는 파일로 내보내는 라이브러리가 없어서 file-saver를 이용해 볼 예정인데, 일단 공식문서를 먼저 살펴보자.

공식문서의 XLSX 파일로 내보내는 가이드인데 writeFile() 메서드는 어째서인지 작동을 안한다.
그래서 buffer에 담아 가져온 다음 blob 처리 해서 파일로 내보낼 것이다.
blob 은 간단하게 객체화 된 파일이라고 보면 되는데, 자세한건 따로 검색해보길 바란다.
async function exportExcel(fileName) {
const buffer = await workbook.xlsx.writeBuffer();
saveAs(new Blob([buffer]), fileName);
workbook.removeWorksheet();
}
비동기 처리를 해야해서 함수로 뺀 다음 async await를 적용하였다.
removeWorksheet() 는 선택사항인데, workbook 객체는 같은 이름의 시트는 생성할 수 없다. 엑셀처럼.
그래서 workbook을 매번 다시 생성하거나 기존 worksheet를 삭제한 다음 다시 생성하는게 낫다고 판단하여 removeWorksheet() 메서드를 추가하였다.
4. 전체소스

본문의 내용을 응용하였으니 참고하여 본인의 소스에 적용하기 바랍니다.
참고자료
https://tesseractjh.tistory.com/236
[JS] 자바스크립트로 엑셀 파일(xlsx) 만들어서 다운받기
엑셀 파일을 만들어주는 라이브러리에는 SheetJS, ExcelJS 등이 있는데, 그 중에서 비교적 엑셀 파일의 커스텀이 자유로운 ExcelJS에 대해서 다루도록 하겠다. 기본 형식 import ExcelJS from 'exceljs'; // workbo
tesseractjh.tistory.com
'덕개' 카테고리의 다른 글
| [Vue.js] Vuex를 대체할 Pinia에 대해 알아보자. (0) | 2023.04.14 |
|---|---|
| [Javascript] TypeScript 1 - 타입스크립트란? (자바스크립트를 타입스크립트처럼 써보자) (0) | 2023.02.12 |
| [Javascript] var , let , const 차이 (ES5, ES6) (0) | 2023.01.19 |
| [음악 장르] 01. 컨트리 뮤직(Country Music) - 카우보이 캡, 블루진 그리고 가죽부츠 (2) | 2022.10.29 |
| [Json/Java Serializer] 이슈해결 - No serializer found for class... (0) | 2022.07.04 |