大家好,我是前端实验室的大师兄!
在 web 开发中,管理后台生成 excel 报表并且下载,一个很常用的功能,很多 Javascript 开发者也提供了很多的这方面的工具来实现这一功能。
今天大师兄给大家分享一个小众的Excel文件解析器和生成器:node-xlsx
之前小师妹推荐过ExcelJS
。这算是Excel处理的第二趴了。
前言
对于Javascript处理 Excel 文件来说,js-xlsx
库是目前 Github 上 star 数量最多的库了,功能非常强大,强大到入门时瑟瑟发抖。文档有些乱,不适合快速上手。
关于 node-xlsx
Node-xlsx
是一个Node.js的扩展,通过名字应该能够猜到是干什么的,主要是用于解析和构建 Microsoft Excel 表格,这个插件基于 js-xlsx
(也就是上面提到上手难度贼大的那个) 扩展,开源的 xlsx 文件解析生成构建插件。
node-xlsx 的技术特性
- 底层基于强大的 SheetJS 构建,对 xlsx 文档的格式兼容性足够好
- 支持导出和读取 xlsx 文档,一个工具库解决导入导出需求
- 只有少数几个 api ,使用非常简单
快速开始
代码语言:javascript复制安装包:npm i node-xlsx -S
或
安装 TypeScript:npm i @types/node-xlsx -D
读取excel
然后在项目中引入,就可以使用了。下面的代码是通过读取二进制文件或者 buffer 来处理导入的 xlsx 文档:
代码语言:javascript复制// 解析buffer缓存
const workSheetsFromBuffer = xlsx.parse(fs.readFileSync(`${__dirname}/myFile.xlsx`));
// 解析二进制文件
const workSheetsFromFile = xlsx.parse(`${__dirname}/myFile.xlsx`);
我们假设myFile文件中只有一张表,且表的数据是这样的(这可能是实话...哈哈)。
然后接着取数据。
- 工作表数据对象
let sheetObj = workSheetsFromFile[1].data;
或者匹配工作表名称取到工作表数据对象
代码语言:javascript复制if(workSheetsFromFile[1].namee == "人员") {
sheetObj = workSheetsFromFile[1].data;
}
- 遍历工作表数据对象获取数据
var testData,testData2
for(var j = 0;j < sheetObj.length;j ){
//sheetObj[行][列]
testData = sheetObj[j][0]
testData2 = sheetObj[j][1]
console.log(testData ':' testData2)
}
打印的结果:
代码语言:javascript复制美女:小师妹
帅哥:大师兄
这几乎就能推出node-xlsx
的数据结构了
let data = [
{
name: "人员",
data: [
["美女", "小师妹"],
["帅哥", "大师兄"]
]
}
]
写入excel
这相当于反过来写。也很简单。先构建数据
代码语言:javascript复制var data = [
['A','B','C'],
[1,2,3],
[true, false, null, '前端实验室'],
['今天','是',new Date('2022-09-19T14:30Z'), '不错']
];
再构建工作表
代码语言:javascript复制var buffer = xlsx.build([{name: "mySheetName", data: data}]);
// returns a buffer
最后写入文件 写入需要fs
的支持,提前安装下来。接着就可以使用了。
import fs from 'fs'
...
// 写入文件
fs.writeFileSync(`${__dirname}/common/dist/test-sheet.xlsx`, Buffer.from(buffer));
打开这个 Excel 文件,可以看到:
好了。这样导出也OK啦~
node-xlsx
在构建工作表的时候,可以进行行列配置。具体使用可以参考下面链接。
node-xlsx 地址 https://github.com/mgcrea/node-xlsx
注意事项
node-xlsx
只能处理结构相对简单的数据文档,如果数据格式比较复杂,可以到 SheetJS
去查询数据格式的处理方法。不过如果想要设置单元格样式这样的功能,node-xlsx 可能就满足不了了。
写在最后
欢迎加入前端实验室读者交流群,群里有不少技术大神,不定时会分享一些技术要点,更有一些资源收藏爱好者会分享一些优质的学习资料。吃瓜、摸鱼、白嫖技术就等你了~
进群方式:在下方公众号后台,回复 111
,按提示操作即可进群。
如果该文章对你有帮助,那么就点击右下角的 [点赞]「在看」,给一个小小的鼓励吧~