[Node.js] Excel 파일 생성하고 데이터 읽기[Node.js] Excel 파일 생성하고 데이터 읽기

Posted at 2020. 5. 1. 13:19 | Posted in Node.js
반응형




API : https://www.npmjs.com/package/xlsx




■ 엑셀 데이터 읽어오기





 $ npm install xlsx









■ 엑셀 데이터 읽어오기



# 엑셀파일




# 소스코드

 excel_file_read.js

// @breif xlsx 모듈추출

const xlsx = require( "xlsx" );


// @files 엑셀 파일을 가져온다.

const excelFile = xlsx.readFile( "wise_life_doctor.xlsx" );


// @breif 엑셀 파일의 첫번째 시트의 정보를 추출

const sheetName = excelFile.SheetNames[0];          // @details 첫번째 시트 정보 추출

const firstSheet = excelFile.Sheets[sheetName];       // @details 시트의 제목 추출


// @details 엑셀 파일의 첫번째 시트를 읽어온다.

const jsonData = xlsx.utils.sheet_to_json( firstSheet, { defval : "" } );


console.log( jsonData );




# 출력결과

 $ node excel_file_read.js







■ 엑셀 파일 작성하기



# 소스코드

 excel_write_file.js

// @breif xlsx 모듈추출

const xlsx = require( "xlsx" );


// @breif 가상의 엑셀파일을 생성한다.

const book = xlsx.utils.book_new();


// --------------------------------------------------------------------


// @breif 1번 시트

// @breif aoa_to_sheet 방식으로 데이터를 생성한다.

const doctors = xlsx.utils.aoa_to_sheet( [

      [ "학과", "직급", "이름", "나이" ]

    , [ "흉부외과", "병원장", "주전", "67" ]

    , [ "흉부외과", "교수", "천명태", "52" ]

    , [ "흉부외과", "치프", "도재학", "39" ]

    , [ "소아외과", "레지던트", "장겨울", "29" ]

    , [ "산부인과", "레지던트", "추민하", "34" ]

    , [ "산부인과", "레지던트", "명은원", "28" ]

    , [ "신경외과", "교수", "민기준", "55" ]

    , [ "신경외과", "치프", "용석민", "33" ]

    , [ "신경외과", "레지던트", "안치홍", "38" ]

    , [ "신경외과", "레지던트", "허선빈", "31" ]

    , [ "응급의학과", "조교수", "봉광현", "40" ]

    , [ "응급의학과", "펠로우", "배준희", "31" ]

] );


// @breif CELL 넓이 지정

doctors["!cols"] = [

      { wpx : 130 }   // A열

    , { wpx : 100 }   // B열

    , { wpx : 80 }    // C열

    , { wch : 60 }    // D열

]


// @breif 첫번째 시트에 작성한 데이터를 넣는다.

xlsx.utils.book_append_sheet( book, doctors, "DOCTOR" );


// --------------------------------------------------------------------


// @breif 2번 시트

// @details json_to_sheet 방식으로 데이터를 생성한다.

const nurses = xlsx.utils.json_to_sheet( [

      { A : "학과", B : "직급", C : "이름", D : "나이" }

    , { A : "흉부외과", B : "PA간호사", C : "소이현", D : "33" }

    , { A : "소아외과", B : "PA간호사", C : "한현희", D : "29" }

    , { A : "산부인과", B : "분만실간호사", C : "한한승주현희", D : "41" }

    , { A : "산부인과", B : "PA간호사", C : "은선진", D : "36" }

    , { A : "간담췌외과", B : "수간호사", C : "송수빈", D : "45" }

    , { A : "간담췌외과", B : "병동간호사", C : "이영하", D : "35" }

    , { A : "간담췌외과", B : "병동간호사", C : "김재환", D : "28" }

    , { A : "간담췌외과", B : "PA간호사", C : "국해성", D : "32" }

    , { A : "간담췌외과", B : "이식코디네이터", C : "함덕주", D : "37" }

    , { A : "신경외과", B : "PA간호사", C : "황재신", D : "39" }

    , { A : "응급의학과", B : "응급실간호사", C : "선우희수", D : "26" }

], { header : ["A", "B", "C", "D"], skipHeader : true } );


// @breif CELL 넓이 지정

nurses["!cols"] = [

      { wpx : 130 }   // A열

    , { wpx : 100 }   // B열

    , { wpx : 80 }    // C열

    , { wch : 60 }    // D열

]


// @details 두번째 시트에 작성한 데이터를 넣는다.

xlsx.utils.book_append_sheet( book, nurses, "NURSES" );


// --------------------------------------------------------------------


// @files 엑셀파일을 생성하고 저장한다.

xlsx.writeFile( book, "dramatis_personae.xlsx" ); 




# 실행결과

 $ node excel_write_file.js







반응형
//