node-xlsx文档地址:https://github.com/mgcrea/node-xlsx

node-xlsx依赖于 js-xlsx 组件,API极简单,可读写xlsx文件内容。

node-xlsx的主要使用方法如下:

1 . 读xlsx文件:

let xlsx = require('node-xlsx'),
    fs = require('fs');

const workSheetsFromBuffer = xlsx.parse(fs.readFileSync(`${__dirname}/myFile.xlsx`));
const workSheetsFromFile = xlsx.parse(`${__dirname}/myFile.xlsx`);

2 . 写xlsx文件:

let xlsx = require('node-xlsx'),
    fs = require('fs');

const data = [[1, 2, 3], [true, false, null, 'sheetjs'], ['foo', 'bar', new Date('2014-02-19T14:30Z'), '0.3'], ['baz', null, 'qux']];
var buffer = xlsx.build([{name: "mySheetName", data: data}]);

fs.writeFileSync('./test.xlsx', buffer);

3. 发送excel文件:

发送excel文件到浏览器端的关键是设置好 header 的 Content-Type 值。

对于excel,Content-Type有如下两种:

// .xls 文件
application/vnd.ms-excel

// .xlsx 文件
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

下面以restify为例写一段demo:

let restify = require('restify'),
    xlsx = require('node-xlsx');

let app = restify.createServer({
    name: 'demo-xlsx',
    version: '1.0.0'
});

// 访问 http://127.0.0.1:8001/test,即下载myfile.xlsx文件
app.get('/test', function(req, res, next) {
    const data = [[1, 2, 3], [true, false, null, 'sheetjs'], ['foo', 'bar', new Date('2014-02-19T14:30Z'), '0.3'], ['baz', null, 'qux']];
    return sendExcel(res, data, 'sheet表名', 'myfile');
});

app.listen(8001, function() {
    console.log(app.name, 'Start listening at %s', app.url);
});

/**
 * 写入Excel
 * @param res            Response对象
 * @param xlsxData       xlsx数组
 * @param sheetName      excel表名
 * @param xlsxFileName   excel文件名(备注:不要使用中文)
 */
function sendExcel(res, xlsxData, sheetName, xlsxFileName) {
    try {
        let buffer = xlsx.build([{name: sheetName, data: xlsxData}]);
        let xlsxContentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';  // For Excel2007 and above .xlsx files

        res.setHeader('Content-Type', xlsxContentType);
        res.setHeader('Content-Disposition', `attachment; filename=${xlsxFileName}.xlsx`);
        res.writeHead(200);
        res.end(buffer);
    } catch (err) {
        console.log('mistake to build excel');
    }
}

另外:其他支持读写Excel的Node.js模块有:

  • node-xlsx: 可读写excel文件,仅支持xlsx格式文件;
  • excel-parser: 仅可读excel文件,支持xls及xlsx格式文件;
  • excel-export: 仅可导出excel文件,生成文件格式为xlsx;
  • node-xlrd: 仅可读excel文件,仅支持xls格式文件;
  • … …
本文作者:子匠_Zijor,转载请注明出处:http://www.dengzhr.com/node-js/1400