2017-02-17 21 views
1

내 목표는 xlsx 파일을 읽고 행을 추가하여 출력하는 것입니다. 충분히 단순한가? ExcelJS 및 NodeJS로 xlsx 파일 수정

내가 지금까지 가지고있는 코드 :

var filename1="input.xlsx"; 
var filename2="output.xlsx"; 
var Excel = require('exceljs'); 
var workbook = new Excel.Workbook(); 
workbook.xlsx.readFile(filename1); 
workbook.getWorksheet("Sheet 1").addRow([1,2,3]); 
workbook.xlsx.writeFile(filename2); 
난이 "input.xlsx"에서 해당 데이터를 읽을 시트에 이미 데이터에 추가 행을 작성해야 생각

, 출력을 . 파일을 복사하는 대신 빈 "output.xlsx"를 만듭니다.

나는 바보 같은 짓을하고있는 것을 알고 있습니다. 또한 nodeJS에 완전히 익숙합니다. 이견있는 사람?

+1

실제로 첫 번째 책에 워크 시트 "시트 1"이 있습니까? 내 Excel에서 기본 시트 이름은 "Sheet1"(공백 없음)입니다. –

+1

exceljs의 기본 작업을 추가 할 것입니다. 그러나 GitHub의 이슈 트래커를 살펴보고 길을 너무 멀리하기 전에 확인하십시오. 필요한 모든 기능이 적절하게 작동합니다. –

+0

실제로 시트의 이름이 누군가의 이름이고 나는 온라인으로 게시하고 싶지 않기 때문에 다른 것과 작업하고있는 Excel 문서에서 "시트 1"을 변경했습니다. 두 번 클릭하고 이름이 올바른지 확인하십시오. – sam

답변

5

발생하는 문제는 Node.js 비동기 성질과 관련이 있습니다. readFile(filename1)으로 전화하면 파일 읽기가 시작됩니다. 하지만 그것은 비동기 (비 차단) 함수이므로이 행 뒤의 코드는 읽기가 완료되기 전에 실행됩니다.

콜백 (비동기 호출이 완료 될 때 호출 됨), 약속 (호출이 실행될 때 호출됩니다.), ES6 생성자 및 ES7 비동기/대기 키워드가 이에 해당합니다.

exceljs (문서 당) 약속과 작품 그래서 당신이 다음을 수행 할 수

'use strict'; 
 

 
const Excel = require('exceljs'); 
 
let filename1 = 'input.xlsx'; 
 
let filename2 = 'output.xlsx'; 
 
let workbook = new Excel.Workbook(); 
 
workbook.xlsx.readFile(filename1) 
 
    .then(() => { 
 
     workbook.getWorksheet('Sheet 1').addRow([1, 2, 3]); 
 
     return workbook.xlsx.writeFile(filename2); 
 
    }).then(() => { 
 
     console.log('File is written'); 
 
    }).catch(err => console.error(err));
는 또한 '시트 1'은 실제로 존재하는지 확인하시기 바랍니다 나 때문에 기본 이름 'Sheet1'이었습니다.

인터넷에서이 항목에 대한 많은 기사가 like this 있습니다.