上一篇: node.js 14 自动化工具 (爬虫) Selenium安装使用
nodejs excel操作
绝大部分编程语言都有Office文件的操作库,nodejs也不例外。而且nodejs的世界里,Excel操作模块还是比较多的,这就涉及到选择问题了。到底选哪个Excel操作模块?
Excel操作模块PK
让我们看一下npm包里面的各类Excel操作模块
- ExcelJS
最近更新在4天前,也就是2020年3月份更新的。最新版本3.8.2。从版本维护,文件更新方面都是有保障的。每周的下载量为12万5797次,使用面也是比较广的。再来看文档方面,各类操作都有代码,关键的是有中文翻译的文档。应该说这是一个不错的选择。
- Excel
最近更新在7个月之前,大概是2019年8月份。最新版本为1.0.1。每周的下载量为4410次。除了寥寥数行代码外,几乎没有什么文档。
- node-xlsx
最近更新在1年前,大约是2019年初。最新版本 0.15.0。但是周下载量不错,达到了3万8千多次。文档方面也相对比较完备。应该说node-xlsx也是一个不错的选择。
- SheetJS js-xlsx
最近更新在13天前,也是2020年3月份。最新版本0.15.6。每周的下载量达到了55万8千次,这个使用面是非常广泛了。文档也比较齐全。这是一个非常不错的选择。
- ejsExcel
这是一款国人做的Excel操作模块。最近一次更新在4个月前,也就是2019年11月。最新版本为3.6.0。但是每周下载量是这几个模块中最低的,只有396次。
考虑到文档,中文,下载量,版本维护等,我选择使用ExcelJS来作为Excel文件操作的模块。
ExcelJS安装
使用命令:npm install exceljs --save
D:\Projects\nodejs\NodeDemo\excel>npm install exceljs --save npm WARN deprecated mkdirp@0.5.4: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) npm notice created a lockfile as . You should commit this file. npm WARN excel@1.0.0 No description npm WARN excel@1.0.0 No repository field. + exceljs@3.8.2 added 92 packages from 115 contributors and audited 256 packages in 45.139s 2 packages are looking for funding run `npm fund` for details found 0 vulnerabilities
ExcelJS 代码示例
- 创建Workbook
首先需要引入exceljs模块,通过Excel.Workbook()来构建Workbook。
const Excel = require('exceljs') var workbook = new Excel.Workbook();
- 设置Workbook属性
workbook.creator = 'Vincent'; workbook.lastModifiedBy = 'Vincent'; workbook.created = new Date(2020, 3, 28); workbook.modified = new Date(); workbook.lastPrinted = new Date(2020, 3, 28);
- 添加Worksheet
workbook.addWorksheet('My Sheet')
- 访问Worksheet
提供三种方法,可以通过遍历所有的worksheet,也可以通过worksheet名称或者id来访问。
//遍历所有worksheet workbook.eachSheet(function(worksheet, sheetId) { // ... }); //通过名称访问 var worksheet = workbook.getWorksheet('My Sheet'); //通过id访问 var worksheet = workbook.getWorksheet(1);
- 行操作
添加行只需要调用addRow方法并传入数组即可。
work([1, 'Vincent', 18]); work([2, 'Tom', 25]);
运行结果
获取行信息,需要调用work(index).values方法。
var row = work(1).values;
该代码可以获取第一行的值,返回值为数组。
- 列操作
//设定列 work = [ { header: 'Id', key: 'id', width: 10 }, { header: 'Name', key: 'name', width: 32 }, { header: 'D.O.B.', key: 'DOB', width: 10,} ]; //获取列 var idCol = work('id'); var nameCol = work('B'); var dobCol = work(3); //添加数组到列中 work(6).values = [1,2,3,4,5];
- 单元格操作
//获取单元格 var cell = work('C3'); // 设定单元格value cell.value = 'Vincent' //合并单元格 work('A4:B5'); //获取单元格value work('B5').value //获取单元格注释 work('A1').note //设定单元格注释 work('A1').note='单元格注释'
- 公式 Formula
//单元格公式以及计算值设定 work('A3').value = { formula: 'A1+A2', result: 7 };
注意,上面如果只是设定formula不设定result是不起作用的。经过实际测试,result可以不一定是百分百正确的计算值。当写入文件后,打开excel时,excel会自动通过公式计算并显示正确值。
- 读取xlsx文件
// read from a file var workbook = new Excel.Workbook(); workbook.xl(filename) .then(function() { // use workbook });
- 写入Excel文件
// write to a file var workbook = createAndFillWorkbook(); workbook.xl(filename) .then(function() { // done });
总体ExcelJS模块的API是比较丰富的,可以应对绝大部分Excel操作。并且文档相对比较详细。
如果朋友们有什么问题,欢迎留言讨论。