본문 바로가기

프론트/javascript

[javascript] 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

위의 깃허브 페이지에 접속하면 전체 소스를 다운받아 볼 수 있다.

간단하게 npm으로 설치 하려면

npm install exceljs

위의 명령어로 설치 가능하다.

 

cdn으로 쓰려면

<script src="https://cdn.jsdelivr.net/npm/exceljs@4.3.0/dist/exceljs.min.js"></script>

위의 스크립트를 html 스크립트로 붙여 넣으면 된다.

 

파일 다운로드

간단한 테스트 파일을 다운로드 하는 코드은 다음과 같다.

 

html

<html lang="ko">
    <head>
        <title>exceljs</title>
    </head>
    <body>
        <button id="down">엑셀 다운로드</button>
        <script src="test_exceljs_js.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/exceljs@4.3.0/dist/exceljs.min.js"></script>
    </body>
</html>

javascript

document.querySelector('#down').addEventListener('click', makeFile);
function makeFile (e) {
    const workbook = new ExcelJS.Workbook();
    const sheet = workbook.addWorksheet('tab_1');

    download(workbook, 'test').then(r => {});
}

const download = async (workbook, fileName) => {

    const buffer = await workbook.xlsx.writeBuffer();
    const blob = new Blob([buffer], {
        type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    });
    const url = window.URL.createObjectURL(blob);
    const anchor = document.createElement('a');
    anchor.href = url;
    anchor.download = fileName + '.xlsx';
    anchor.click();
    window.URL.revokeObjectURL(url);
};

엑셀 다운로드 버튼을 클릭하면 makeFile 함수가 실행 되면서 workbook 변수를 만들고 sheet를 만들게 된다. 

이때 시트의 이름을 지정해 줄 수 있다. 그리고 downlload 함수에 workbook 변수와 파일 이름을 지정해서 전달하게 되면

download 함수에서 파일을 다운로드 하게 된다.

 

셀 선택

셀을 선택 하기에 앞서, 시트 변수가 sheet 라면 열과 행 전체를 선택하는 방법은 다음과 같다.

변수로 열과 행의 번호를 넣어주면 된다.

// 열 선택
sheet.getColumn(1);
// 행 선택
sheet.getRow(3);

셀을 선택하는 방법은 보통 두가지를 사용하게 된다. 

1. 엑셀 열의 알파뱃 기호를 쓰는 방법

2. 열과 행의 숫자를 쓰는 방법

어느쪽을 쓰는가는 그때 그때 상황에 맞게 쓰면 된다.

// 열의 알파뱃으로 쓰기
sheet.getCell('C9');
// 숫자로만 쓰기
sheet.getCell(2,10);

이 때 주의할 점은 열과 행을 지정하는 순서가 다르니 헷갈리지 않도록 주의 해야 한다.

 

셀 합치기

셀을 합치기 위해서는 mergeCells 함수를 이용해 시작 셀과 마지막 셀을 지정해 주면 된다.

2열 이상의 경우 좌상단에서 시작해 우하단 셀을 적어주면 된다.

sheet.mergeCells('V9 : V11');

// 열이 2개 이상의 경우
sheet.mergeCells('W9 : Z9');

// 행과 열의 번호로만 쓰게 될 경우
// ([시작행],[시작열],[끝행],[끝열])
sheet.mergeCells(3,3,4,4)

합쳐진 셀을 선택하기 위해서는 시작셀이나 마지막 셀을 선택하면 된다.

 

값 넣기

셀을 선택 했으니 값을 넣어보자.

값을 넣는 가장 간단한 방법은 다음과 같다.

sheet.getCell('D4').value = 'hey dev';

혹은 rich text 를 지원하는데 그 예시 코드는 다음과 같다.

    sheet.getCell('C11').value = {
        richText: [{
            text: '주소',
            font: {size: 9, italic: true}
        }]
    };

 

셀을 지정하고 값을 넣는 과정을 예제로 만들어 보면 다음과 같은 결과가 나온다.

function makeFile (e) {
    const workbook = new ExcelJS.Workbook();
    const sheet = workbook.addWorksheet('tab_1');

    sheet.getCell('A2').value = 3.66;
    sheet.getCell(2,4).value = 'program';
    sheet.mergeCells('C4 : D5');
    sheet.getCell('D5').value = 'merge';
    sheet.getCell('B6').value = {
        richText: [{
            text: '리치텍스트',
            font: {size: 9, italic: true}
        }]
    };

    download(workbook, 'test').then(r => {});
}

download 함수는 위쪽에 있는것을 그대로 사용하면 된다.

 

정렬 설정

셀의 정렬을 선택하기 위해서는 셀을 선택하고 alignment 설정을 해주면 된다.

가로 세로 정렬과 텍스트 줄바꿈을 설정하는 코드는 다음과 같다.

worksheet.getCell('A10').alignment = { vertical: 'top', horizontal: 'left' };
worksheet.getCell('B7').alignment = { vertical: 'middle', horizontal: 'center' };
worksheet.getCell('C3').alignment = { vertical: 'bottom', horizontal: 'right' };

// 줄바꿈 설정
worksheet.getCell('d6').alignment = { wrapText: true };

 

테두리 만들기

테두리 설정을 위해서는 border 설정을 해준다.

위, 아래, 좌, 우, 설정을 각각 해주면 되는데 보통은 style과 color를 지정해 주면 된다.

다음은 많이 쓰이는 style thin 과 medium 을 적용하는 코드다.

테두리를 설정 할 때는 이전의 설정이 적용 되지 않으므로 다시 설정 하려면 모든 방향을 다시 설정 해주어야 한다.

worksheet.getCell('E3').border = {
  top: {style:'thin', color: {argb:'DB576D'}},
  left: {style:'thin', color: {argb:'DB576D'}},
  bottom: {style:'medium', color: {argb:'DB576D'}},
  right: {style:'medium', color: {argb:'DB576D'}}
};

 

색 넣기

셀에 색을 넣는 변수를 fill 이다.

색상은 지정된 색이 있기는 하나, argb로 코드값을 넣는게 편하다.

다음은 단일한 회색을 넣는 예제 코드이다.

worksheet.getCell('U5').fill = {
  type: 'pattern',
  pattern:'solid',
  fgColor:{argb:'D9D9D9'},
};

 

이외에도 위에 링크된 깃허브 페이지에 들어가면 상세한 설명이 나오니 

따라하면 되겠다.

 

반응형