前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >处理Excel文件最简单、最精致的JS库

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

作者头像
程序员老鱼
发布2022-12-02 11:14:19
3.9K0
发布2022-12-02 11:14:19
举报
文章被收录于专栏:前端实验室

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

在 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 ,按提示操作即可进群。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 关于 node-xlsx
  • node-xlsx 的技术特性
  • 快速开始
  • 读取excel
  • 写入excel
  • 注意事项
  • 写在最后
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档