반응형

Express.js 서버로 업로드 한 Excel 파일을 JSON 형식으로 변환하기


재무제표, 수익률 데이터, 용돈 데이터 등등...

종종 Excel로 기록된 데이터를 Node.js에서 다뤄야 할 경우가 있습니다.


Express.js로 구현된 웹 페이지에 사용자가 엑셀 파일을 업로드하면, 해당 파일을 읽어들여 json 형식으로 돌려주는 예제를 공유합니다.


사전 준비

1. Dependencies: 아래 명령어를 이용해 필요한 패키지를 설치합니다.

multiparty: multipart/form-data 형식으로 전송된 파일을 좀 더 편리하게 다룰 수 있도록 도와줍니다.

xlsx: Excel 파일을 다룰 수 있도록 도와줍니다.


실습

1. Sample Code: 아래 코드를 app.js로 저장합니다.



const express = require('express');

const http = require('http');

const bodyParser = require('body-parser');

const multiparty = require('multiparty');

const xlsx = require('xlsx');

 

const app = express();

 

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({

    limit: '150mb',

    extended: false,

}));

 

app.get('/', (req, res, next) => {

    let contents = '';

    contents += '<html><body>';

    contents += '   <form action="/" method="POST" enctype="multipart/form-data">';

    contents += '       <input type="file" name="xlsx" />';

    contents += '       <input type="submit" />';

    contents += '   </form>';

    contents += '</body></html>';

 

    res.send(contents);

});

 

app.post('/', (req, res, next) => {

    const resData = {};

 

    const form = new multiparty.Form({

        autoFiles: true,

    });

 

    form.on('file', (name, file) => {

        const workbook = xlsx.readFile(file.path);

        const sheetnames = Object.keys(workbook.Sheets);

 

        let i = sheetnames.length;

 

        while (i--) {

            const sheetname = sheetnames[i];

            resData[sheetname] = xlsx.utils.sheet_to_json(workbook.Sheets[sheetname]);

        }

    });

 

    form.on('close', () => {

        res.send(resData);

    });

 

    form.parse(req);

});

 

http.createServer(app).listen(3000, () => {

    console.log('HTTP server listening on port ' + 3000);

});




app.js:30: multiparty를 이용해 Form 데이터를 처리합니다. 이 때, autoFiles를 true로 지정하면 POST 방식으로 전달된 파일만 처리하도록 할 수 있습니다.

app.js:35: xlsx를 이용해 전달된 파일을 객체로 변환합니다. 이 객체에는 파일 정보, 테마, 시트별 데이터 등 다양한 정보가 담겨있습니다.

app.js:40~43: 시트별 내용을 결과 객체에 담습니다. 이 때 42행에 있는 xlsx.utils.sheet_to_json()이 시트의 내용을 JSON 객체로 변환하는 작업을 수행합니다.


2. 터미널에서 아래 명령어를 입력하면 서버가 실행됩니다.

1
node app.js


3. 테스트 할 엑셀 파일을 생성합니다.


4. 실행된 서버에 접속하면 File을 업로드 할 수 있는 페이지가 표시됩니다.


5. 테스트 파일을 선택하고 업로드하면 JSON 변환 결과가 표시됩니다.


6. 테스트 파일과 비교해보면 올바르게 파싱된 것을 확인할 수 있습니다.


GitHub

본 강의에 사용한 코드는 GitHub에 공개되어 있습니다.

https://github.com/jETA-Kor/examples


참고 문서

node.js에서 multipary와 multer를 이용한 파일 업로드 하기: http://bcho.tistory.com/1078

npm - multiparty: https://www.npmjs.com/package/multiparty

npm - xlsx: https://www.npmjs.com/package/xlsx



출처: https://jetalog.net/58?category=741674 [jetalog.net]

반응형

+ Recent posts