node.js excel 파일 읽기 및 쓰기
수요
지난번 추문에서 나는 이러한 요구를 언급했다.
A가 작업 파일(파일 형식에 제한이 없음)을 사이트에 업로드하고 B가 본 후에 파일을 다운로드하여 파일의 요구에 따라 작업을 완성한 후에 B는 작업 완성 상황을 하나의 Excel 문서에 모아 사이트에 업로드한다. (이때 xls 형식의 excel 문서만 업로드할 수 있음) 그리고 사이트는 백그라운드에서 이 Excel 문서의 데이터를 처리하여 새로운 Excel 문서를 생성한다.
그래서 나는 을 공유하는 글을 썼다.이번에는 이 수요에 맞추어 node를 공유하고 싶습니다.js excel 파일 읽기 및 쓰기
실현
생각
Excel 읽기와 쓰기를 지원하는 node.js 모듈
npm에서 검색한 결과 excel 파일 읽기와 쓰기를 지원하는 모듈이 매우 많지만 각각 결함이 있습니다. 일부는 xls/xlsx의 형식만 지원하고 일부는 데이터 읽기만 지원하며 일부는 파일 내보내기만 지원합니다.예:
제 프로젝트에서 저는 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 파일의 데이터를 읽고 해석한 후, 일반적으로 프로젝트의 수요에 따라 데이터를 처리해야 한다.데이터 처리를 할 때 해석된 데이터의 데이터 형식과 새로운 표를 생성할 때 처리된 데이터의 데이터 형식이 설정된 데이터 형식에 부합되는지 각별히 주의해야 한다.그렇지 않으면 버그가 끊임없이...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Express + AWS S3 이미지 업로드하기웹 사이트 및 모바일 애플리케이션 등에서 원하는 양의 데이터를 저장하고 보호할 수 있다. 데이터에 대한 액세스를 최적화, 구조화 및 구성할 수 있는 관리 기능을 제공한다. AWS S3 에 저장된 객체에 대한 컨테이너...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.