网站首页 > 技术文章 正文
上一篇: 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操作。并且文档相对比较详细。
如果朋友们有什么问题,欢迎留言讨论。
猜你喜欢
- 2024-12-28 3步教你,百度网盘下载不限速,比SVIP速度还要快
- 2024-12-28 魔兽怀旧服,重复交任务宏,冲声望必备
- 2024-12-28 「安卓按键」怎么让脚本可以领取免费测试卡
- 2024-12-28 写作4年挣50万,推荐6个新手容易过稿的投稿平台
- 2024-12-28 黑客大神用什么杀毒?Windows自带的就够,只是加了亿点微小强化
- 2024-12-28 微软阻止第三方下载 Windows 镜像?
- 2024-12-28 B站视频下载详细教程 b站咋样下载视频
- 2024-12-28 从0开始学习Jmeter脚本编写 jmeter打开脚本报错
- 2024-12-28 网站渗透总结之Getshell用法大全 网站渗透技术
- 2024-12-28 如何通过C脚本在WinCC画面中的“文本”不再那么单调?
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)