处理Excel文件最简单、最精致的JS库

2022-12-02 11:14:19 浏览数 (1)

大家好,我是前端实验室的大师兄!

在 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文件中只有一张表,且表的数据是这样的(这可能是实话...哈哈)。

然后接着取数据。

  1. 工作表数据对象
代码语言:javascript复制
let sheetObj = workSheetsFromFile[1].data;

或者匹配工作表名称取到工作表数据对象

代码语言:javascript复制
if(workSheetsFromFile[1].namee == "人员") {
  sheetObj =  workSheetsFromFile[1].data;
}
  1. 遍历工作表数据对象获取数据
代码语言:javascript复制
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的数据结构了

代码语言:javascript复制
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的支持,提前安装下来。接着就可以使用了。

代码语言:javascript复制
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 ,按提示操作即可进群。

如果该文章对你有帮助,那么就点击右下角的 [点赞]「在看」,给一个小小的鼓励吧~

0 人点赞