node.js excel 파일 읽기 및 쓰기

수요


지난번 추문에서 나는 이러한 요구를 언급했다.
A가 작업 파일(파일 형식에 제한이 없음)을 사이트에 업로드하고 B가 본 후에 파일을 다운로드하여 파일의 요구에 따라 작업을 완성한 후에 B는 작업 완성 상황을 하나의 Excel 문서에 모아 사이트에 업로드한다. (이때 xls 형식의 excel 문서만 업로드할 수 있음) 그리고 사이트는 백그라운드에서 이 Excel 문서의 데이터를 처리하여 새로운 Excel 문서를 생성한다.
그래서 나는 을 공유하는 글을 썼다.이번에는 이 수요에 맞추어 node를 공유하고 싶습니다.js excel 파일 읽기 및 쓰기

실현


생각

  • 읽기 및 쓰기 엑셀을 지원하는 외부 모듈
  • 도입 모듈
  • 업무 논리 함수를 작성한다

  • Excel 읽기와 쓰기를 지원하는 node.js 모듈


    npm에서 검색한 결과 excel 파일 읽기와 쓰기를 지원하는 모듈이 매우 많지만 각각 결함이 있습니다. 일부는 xls/xlsx의 형식만 지원하고 일부는 데이터 읽기만 지원하며 일부는 파일 내보내기만 지원합니다.예:
  • node-xlsx: Node 기반.js는 excel 파일 데이터를 분석하고 excel 파일을 생성하며 xlsx 형식 파일만 지원합니다
  • excel-parser: Node 기반.js는 excel 파일 데이터를 분석하고 xls 및 xlsx 형식 파일을 지원합니다
  • excel-export: Node 기반.js는 데이터 생성을 excel 파일로 내보내고 파일 형식을 xlsx로 생성합니다
  • node-xlrd: node 기반.js는 excel 파일에서 데이터를 추출하고 xls 형식 파일만 지원합니다..

  • 제 프로젝트에서 저는 noe-xlrd 모듈과 excel-export 모듈을 사용하여 업로드된 excel 파일의 데이터를 추출하고 새로운 excel 파일을 생성합니다.

    도입 모듈


    프로젝트 프로젝트의 패키지를 편집합니다.json 파일:
    {
      "name": "appname",
      "virsion": "0.0.1",
      "dependencies": {
        "express": "~4.8.8",
        "node-xlrd": "0.2.4",
        "excel-export": "0.4.1"
      }
    }

    node 명령을 실행하여 모듈 설치
    npm install

    업무 논리 함수 작성


    1. excel 파일 데이터 분석
    var xl = require('node-xlrd');
    
    exports.read = function(req, res, next){
        var path = 'test.xls';
        var datas = [];
    
        xl.open(path, function(err,bk){
            if(err) {console.log(err.name, err.message); return;}
            
            var shtCount = bk.sheet.count;
            for(var sIdx = 0; sIdx < shtCount; sIdx++ ){
                console.log('sheet "%d" ', sIdx);
                console.log('  check loaded : %s', bk.sheet.loaded(sIdx) );
                var sht = bk.sheets[sIdx],
                    rCount = sht.row.count,
                    cCount = sht.column.count;
                console.log('  name = %s; index = %d; rowCount = %d; columnCount = %d', sht.name, sIdx, rCount, cCount);
                for(var rIdx = 0; rIdx < rCount; rIdx++){    // rIdx: ;cIdx: 
                    var data = [];
                    for(var cIdx = 0; cIdx < cCount; cIdx++){
                        try{
                            data[cIdx] = sht.cell(rIdx,cIdx);
                            console.log('  cell : row = %d, col = %d, value = "%s"', rIdx, cIdx, sht.cell(rIdx,cIdx));
                        }catch(e){
                            console.log(e.message);
                        }
                    }
                    datas[rIdx] = data;
                }
            }
    
            req.datas = datas;
        });
    };

    해석된 데이터는 서로 다른 데이터 형식이 있습니다:string,number.쓸 수 있어요 typeof sht.cell(rIdx,cIdx) 데이터 유형을 검출한다.
    2. 처리된 데이터를 새 excel 파일로 생성
    var excelPort = require('excel-export');
    exports.write = function(req, res, next){
        var datas = req.datas;
        var conf = {};
        var filename = 'filename';  // 
    
        
        conf.cols = [
           {caption:' ', type:'string', width:20},
           {caption:' ', type:'string', width:40},
           {caption:' ', type:'string', width:20},
           {caption:' ', type:'date', width:40},
           {caption:' ', type:'string', width:30},
           {caption:' ', type:'string', width:30},
           {caption:' ', type:'number', width:30},
           {caption:' ', type:'string', width:30}
        ];
    
        
        var array = [];
        array[0] = [
            datas[0][0],
              datas[0][1],
              datas[0][2],
              datas[0][3],
              datas[0][4],
              datas[0][5],
              datas[0][6],
              datas[0][7]
        ];
    
    
        conf.rows = array[0];
        var result = excelPort.execute(conf);
    
        var random = Math.floor(Math.random()*10000+0);
    
        var uploadDir = 'public/upload/pay/';
        var filePath = uploadDir + filename + random + ".xlsx";
    
        fs.writeFile(filePath, result, 'binary',function(err){
            if(err){
                console.log(err);
            }
        });
    }

    caption은 첫 줄의 각 칸 내용을 설정합니다. type은 모든 열의 데이터 형식을 설정하고width는 칸 크기를 설정합니다.
    rows는 모든 줄의 데이터를 부여합니다. 모든 데이터는 해당 열에 설정된 데이터 형식과 일치해야 합니다. 그렇지 않으면 오류가 발생합니다. 생성된 표는 NaN을 표시합니다.

    총결산


    excel 파일의 데이터를 읽고 해석한 후, 일반적으로 프로젝트의 수요에 따라 데이터를 처리해야 한다.데이터 처리를 할 때 해석된 데이터의 데이터 형식과 새로운 표를 생성할 때 처리된 데이터의 데이터 형식이 설정된 데이터 형식에 부합되는지 각별히 주의해야 한다.그렇지 않으면 버그가 끊임없이...

    좋은 웹페이지 즐겨찾기