본문 바로가기
Dev/Node

Node.js - Excel Download With Template

by 펭귄안에 온천 2022. 3. 30.
728x90
반응형

xls Template 사용하여 Excel download wirh Template

구현

npm install

npm i xlsx-template

소스코드

var fs = require('fs');
var XlsxTemplate = require('xlsx-template');
var path = require('path');
var mime = require('mime');

//템플릿 명
var temp_name = "template01.xlsx";
//엑셀 데이터
var params={     
  extractDate: '20201127',
  revision: 2,
  dates: [new Date("1993-07-07"), new Date("2020-11-27") , new Date("2021-10-16") ],
  planData: [
      {
          name: "숫자도 가능",
          role: "테스트",
          days: [8, 8, 4]
      }, {
          name: "한글 테스트도 잘 됨",
          role: "KOREA",
          days: [4, 4, 4]
      }, {
          name: "ENG OK",
          role: "Manage",
          days: [4, 4, 4]
      }
  ]
};


const rootPath = "root 경로"
fs.readFile(path.join(rootPath, 'xlsTemplate/template', temp_name ), function(err, data) {
    //템플릿 을 읽어 Set data
    var t = new XlsxTemplate(data);
    t.substitute(1, params );

    var newData = t.generate();
    // 작성된 엑셀 파일을 temp.xlsx로 저장한다.
    fs.writeFile('xlsTemplate/dump/temp.xlsx', newData, 'binary', function(err) {
        file = path.join(rootPath , 'xlsTemplate/dump' ,'temp.xlsx');
        try {
            if (fs.existsSync(file)) { // 파일이 존재하는지 체크
              var filename = path.basename(file); // 파일 경로에서 파일명(확장자포함)만 추출
              var mimetype = mime.getType(file); // 파일의 타입(형식)을 가져옴
              res.setHeader('Content-disposition', 'attachment; filename=' + filename); // 다운받아질 파일명 설정
              res.setHeader('Content-type', mimetype); // 파일 형식 지정

              //작성된 엑셀 파일 다운로드
              var filestream = fs.createReadStream(file);
              filestream.pipe(res);

            }else{
                res.send('해당 파일이 없습니다.');  
                return;
            };
        } catch (e) { // 에러 발생시
            console.log(e);
            res.send('파일을 다운로드하는 중에 에러가 발생하였습니다.');
            return;
        };
    });
});

Excel Template Download

img

반응형

'Dev > Node' 카테고리의 다른 글

Node.js - 오라클 연동에 mybatis까지  (0) 2022.03.30
[Node] Node.js - 키보드 입력시키기  (0) 2022.03.30
PM2 무중단 서비스  (0) 2022.03.29