2017-02-17 576 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

您是否確實在第一本書中有一張工作表「Sheet 1」?在我的Excel中,默認的工作表名稱是「Sheet1」(沒有空格) –

+1

我將在exceljs中添加基本操作看起來沒問題 - 但在你走得太遠之前,先看看GitHub上的問題跟蹤器,並確保您需要的任何功能都可以充分工作。 –

+0

其實,我從Excel文檔中改變了「Sheet 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