본문 바로가기
Runtime/Node.js

27. 엑셀 파일 처리(엑셀 파일 생성)

by 김엉배 2023. 4. 26.
728x90
반응형

 

1.  엑셀 파일 생성

  • 고객 정보를 엑셀 파일을 생성하는 예제
const xlsx = require('xlsx');
const workbook = xlsx.utils.book_new();  // 가상의 엑셀 파일 생성

const customers = [
  {A: '고객명', B: '이메일', C: '연락처'}, // 첫 번째 행 - 컬럼명에 해당하는 데이터
  {A: '아무개1', B: 'kim@gmail.com', C: '010-00000-00000'},
  {A: '테스트', B: 'test@gmail.com', C: '010-1111-1111'},
  {A: '홍길동', B: 'hhhh@gmail.com', C: '010-2222-22222'},
  {A: '테스트2', B: 'ttttt@gmail.com', C: '010-3333-3333'},
  {A: '테스트3', B: 'test123@gmail.com', C: '010-4444-4444'},
];

// json_to_sheet 방식으로 데이터 생성
const firstSheet = xlsx.utils.json_to_sheet(customers, {header :["A", "B", "C"],
skipHeader: true}); // skipHeader가 false이면 엑셀 시트의 첫 번째 행에 header에 해당하는 A, B, C 가 삽입

// 칼럼 넓이 지정
firstSheet["!cols"] = [
  { wpx : 120 }, // A열
  { wpx : 250 }, // B열
  { wpx : 200 }, // C열
];

// 첫 번째 시트에 작성한 데이터를 넣는다.
xlsx.utils.book_append_sheet(workbook, firstSheet, "Customers");

// 엑셀 파일을 생성하고 저장
xlsx.writeFile(workbook, "./xlsx/customers.xlsx");

1) XLSX.utils.book_new() 함수를 사용해서 가상의 workbook 생성

2) 엑셀 시트에 기록할 데이터 생성

3) 엑셀 시트 생성(json_to_sheet() 함수 사용)

4) workbook에 엑셀 시트 추가

5) 새로운 엑셀 파일을 생성하고 workbook 내용을 기록

 

  • 엑셀 파일 생성 결과

 

 

 

2.  셀 스타일

 - 셀(cell)에 스타일을 주기 위해서 xlsx 모듈 자체를 이용하지 않고 xlsx 모듈의 깃허브 레파지토리를 포크 해서 스타일 기능을 추가한
    xlsx-js-style 모듈을 사용

 

  • xlsx-js-style 설치
npm install xlsx-js-style

 

  • 고객 정보 엑셀 파일 생성 예제 수정
const xlsx = require('xlsx-js-style'); // xlsx-js-style 모둘 시용
const workbook = xlsx.utils.book_new();  // 가상의 엑셀 파일 생성

const customers = [
  {A: '고객명', B: '이메일', C: '연락처'}, // 첫 번째 행 - 컬럼명에 해당하는 데이터
  {A: '아무개1', B: 'kim@gmail.com', C: '010-00000-00000'},
  {A: '테스트', B: 'test@gmail.com', C: '010-1111-1111'},
  {A: '홍길동', B: 'hhhh@gmail.com', C: '010-2222-22222'},
  {A: '테스트2', B: 'ttttt@gmail.com', C: '010-3333-3333'},
  {A: '테스트3', B: 'test123@gmail.com', C: '010-4444-4444'},
];

// json_to_sheet 방식으로 데이터 생성
const firstSheet = xlsx.utils.json_to_sheet(customers, {header :["A", "B", "C"],
skipHeader: true}); // skipHeader가 false이면 엑셀 시트의 첫 번째 행에 header에 해당하는 A, B, C 가 삽입

// 칼럼 넓이 지정
firstSheet["!cols"] = [
  { wpx : 120 }, // A열
  { wpx : 250 }, // B열
  { wpx : 200 }, // C열
];

firstSheet["A1"].s = { // 스타일 변경
  font: {
    name: "Calibri",
    sz: 24,
    bold: true,
    color: {rgb: "FFFFAA00"}
  }
}

// 첫 번째 시트에 작성한 데이터를 넣는다.
xlsx.utils.book_append_sheet(workbook, firstSheet, "Customers");

// 엑셀 파일을 생성하고 저장
xlsx.writeFile(workbook, "./xlsx/customers_style.xlsx");

 

  • 엑셀 파일 생성 결과

 

  • xlsx-js-style 모듈에서 지정할 수 있는 스타일
스타일 속성 스타일 속성의 하위 속성  적용값
fill patternType 'solid' 혹은 'none'
fgColor 전경색(COLOR_SPEC)
bgColor 배경색(COLOR_SPEC)
font name 폰트명
sz 폰트 크기
color 폰트 색상
bold 볼드체 여부(true or false)
underline 밑줄 여부(true or false)
italic 이탤릭체 여부(true or false)
strike 취소선 여부(true or false)
outline 아웃라인 여부(true or false)
vertAlign 그림자 여부(true or false)
numFmt   '0'
'0.00%'
''mm/dd/yy'
aligment vertical 세로 정렬(bottom, center, top)
horizontal 가로 정렬('left', 'center', 'top')
wrapText 줄 바꿈 여부(true or false)
readongOrder 값이 2이면 RTL(Right To Left)
textRotation 0에서 180 사이 숫자
90은 90도만큼 회전
border top 위쪽 경계선으로  아래와 같이 style과 color값에 대한 오브젝트
{style: BORDED_STYLE,
 color: COLOR_SPEC }
bottom 아래쪽 경계선으로  아래와 같이 style과 color값에 대한 오브젝트
{style: BORDED_STYLE,
 color: COLOR_SPEC }
left 왼쪽 경계선으로  아래와 같이 style과 color값에 대한 오브젝트
{style: BORDED_STYLE,
 color: COLOR_SPEC }
right 오른쪽 경계선으로  아래와 같이 style과 color값에 대한 오브젝트
{style: BORDED_STYLE,
 color: COLOR_SPEC }
diagonal 대가선으로  아래와 같이 style과 color값에 대한 오브젝트
{style: BORDED_STYLE,
 color: COLOR_SPEC }
diagonaUp 아래에서 위로 긋는 대각선 여부
(true or false)
diagonaDown 위에서 아래로 긋는 대각선 여부
(true or false)

 

728x90
반응형

'Runtime > Node.js' 카테고리의 다른 글

29. 크롤링  (0) 2023.04.30
28. 웹소켓  (1) 2023.04.30
26. 엑셀 파일 처리(엑셀 파일 내용 수정)  (3) 2023.04.24
25. 엑셀 파일 처리(엑셀 파일 읽기)  (4) 2023.04.24
24. 작업 스케줄러(Job Scheduler)  (3) 2023.04.23