优秀的编程知识分享平台

网站首页 > 技术文章 正文

node.js 15 如何操作Excel文件 nodejs office

nanyue 2024-12-28 14:33:00 技术文章 1 ℃

上一篇: node.js 14 自动化工具 (爬虫) Selenium安装使用


绝大部分编程语言都有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 package-lock.json. 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方法并传入数组即可。

worksheet.addRow([1, 'Vincent', 18]);
worksheet.addRow([2, 'Tom', 25]);

获取行信息,需要调用worksheet.getRow(index).values方法。

var row = worksheet.getRow(1).values;

该代码可以获取第一行的值,返回值为数组。

  • 列操作
//设定列
worksheet.columns = [
  { header: 'Id', key: 'id', width: 10 },
  { header: 'Name', key: 'name', width: 32 },
  { header: 'D.O.B.', key: 'DOB', width: 10,}
];

//获取列
var idCol = worksheet.getColumn('id');
var nameCol = worksheet.getColumn('B');
var dobCol = worksheet.getColumn(3);

//添加数组到列中
worksheet.getColumn(6).values = [1,2,3,4,5];
  • 单元格操作
//获取单元格
var cell = worksheet.getCell('C3');
 
// 设定单元格value
cell.value = 'Vincent'

//合并单元格
worksheet.mergeCells('A4:B5');

//获取单元格value
worksheet.getCell('B5').value

//获取单元格注释
worksheet.getCell('A1').note

//设定单元格注释
worksheet.getCell('A1').note='单元格注释'
  • 公式 Formula
//单元格公式以及计算值设定
worksheet.getCell('A3').value = { formula: 'A1+A2', result: 7 };

注意,上面如果只是设定formula不设定result是不起作用的。经过实际测试,result可以不一定是百分百正确的计算值。当写入文件后,打开excel时,excel会自动通过公式计算并显示正确值。

  • 读取xlsx文件
// read from a file
var workbook = new Excel.Workbook();
workbook.xlsx.readFile(filename)
  .then(function() {
    // use workbook
  });
  • 写入Excel文件
// write to a file
var workbook = createAndFillWorkbook();
workbook.xlsx.writeFile(filename)
  .then(function() {
    // done
  });

总体ExcelJS模块的API是比较丰富的,可以应对绝大部分Excel操作。并且文档相对比较详细。

如果朋友们有什么问题,欢迎留言讨论。

Tags:

最近发表
标签列表