Javascript/Node.js

[ Node.js ] - 엑셀 파일 만들기 & 엑셀 파일 읽기

algml0703 2022. 8. 23. 10:10
반응형

write-excel-file

엑셀 파일을 만들어 준다.

 > npm install write-excel-file --save

코드

const writeXlsxFile = require("write-excel-file/node");
const fs = require("fs");

const HEADER_ROW = [
  {
    value: "Name",
    fontWeight: "bold",
  },
  {
    value: "Birth",
    fontWeight: "bold",
  },
  {
    value: "phone",
    fontWeight: "bold",
  },
  {
    value: "region",
    fontWeight: "bold",
  },
];

const DATA_ROW_1 = [
  // "Name"
  {
    type: String,
    value: "oh",
  },

  // "Birth"
  {
    type: Date,
    value: new Date(),
    format: "mm/dd/yyyy",
  },

  // "Phone"
  {
    type: Number,
    value: 1012345678,
  },

  // "Region"
  {
    type: String,
    value: "Seoul",
  },
];

const data = [HEADER_ROW, DATA_ROW_1];

const makeExcel = async () => {
  if (!fs.existsSync("./excel")) {
    // excel 폴더가 존재하지 않는 경우 excel 폴더를 생성한다.
    fs.mkdirSync("./excel");
  }
  await writeXlsxFile(data, {
    filePath: "./excel/member.xlsx",
  });
};

makeExcel();

 위와 같이 작성 후 실행시켜보면, excel 폴더가 생성되고 그 안에 아래와 같은 member.xlsx 파일이 만들어진 것을 확인할 수 있다.

 


read-excel-file 

엑셀 파일을 읽어온다.

> npm install read-excel-file --save

 

예시

폴더 구조  

rootDir 
L index.js  // 엑셀 코드 읽어올 코드 작성하는 부분
L member.xlsx  // 해당 엑셀 파일

 

코드

const readXlsxFile = require('read-excel-file/node');
const fs = require('fs');

readXlsxFile("./member.xlsx").then((rows) => {
  console.log(rows);
  let jsonData = [];
  for (let i = 0; i < rows.length; i++) {
    if (i !== 0) {
      const inputData = {
        number: rows[i][0],
        name: rows[i][1],
        team: rows[i][2],
        phone: rows[i][3],
      };
      jsonData.push(inputData);
    }
  }
  const jsonDataToString = JSON.stringify(jsonData);
  fs.writeFileSync("./dataToJSon.json", jsonDataToString);
});

처음에 콘솔로 rows 찍은 것을 확인해보면 아래와 같이 나온다.

fs.writeFileSync의 경우 fs.writeFileSync([경로], [해당 경로의 파일에 입력될 데이터])

JSON.stringify()는 자바스크립트의 값이나 객체를 json 파일로 변환하여 주는 역할을 한다.

그리고 위의 코드를 실행시키면 dataToJson.json 파일이 아래와 같이 생성된다.

혹은 한 행에 해당하는 정보를 아래 별도의 파일로 관리하고 싶은 경우 아래와 같이 코드를 작성할 수 있다.

const readXlsxFile = require("read-excel-file/node");
const fs = require("fs");

readXlsxFile("./member.xlsx").then((rows) => {
  let jsonData = [];
  for (let i = 0; i < rows.length; i++) {
    if (i !== 0) {
      const inputData = {
        number: rows[i][0],
        name: rows[i][1],
        team: rows[i][2],
        phone: rows[i][3],
      };
      const jsonData = JSON.stringify(inputData);
      if (!fs.existsSync("./json")) {
        // json 폴더가 존재하지 않는 경우 json 폴더를 생성한다.
        fs.mkdirSync("./json");
      }
      fs.writeFileSync(`./json/member${rows[i][0]}.json`, jsonData);
    }
  }
});

위의 코드를 실행하면 아래와 같이 json 폴더가 생성되고, 해당 폴더 안에 각 행들이 별도의 파일로 생성된다.

 

 

 

출처

https://www.npmjs.com/package/read-excel-file

 

반응형