nodejs通过tb-excel自定义解析Excel

本文介绍了在Node.js环境下,如何利用第三方库处理Excel文件,特别是通过自定义解析来处理UTF8+BOM编码的Buffer数据,将二维数组转化为键值对对象,并过滤各种格式的数据,实现数据格式化。同时,文章还讨论了优化步骤,包括封装工具类、错误处理和性能优化等。
摘要由CSDN通过智能技术生成

众多的库中,能够很轻松的找到解析xlsx, csv格式文件的第三方库,并且有许多质量不错的库,如 node-xlsx , excel-parser, excel-export等,都能够帮助我们解析或者生成xlsx, csv文件,但是大部分都局限于文件

GitHub

背景

在实际的生产环境中,为了避免大量的io和并发等性能压力,我们通常不会将文件直接上传或者生成到本地,比如我们要解析一个excel文件(xlsx),我们通常会将文件上传到文件服务器(OSS, Striker),然后通过访问文件服务器拿到我们想要的资源进行处理

在网上看了几个库, 做的事情大同小异,但是都满足不了我们想要的结果:

  • 除了能够直接读取文件,我们还希望能够直接塞buffer进行数据解析(UTF8+BOM)
  • 我们希望解析出来的数据不需要我们额外造轮子进行格式转换: 通常解析出来是一个二维数组, 希望能够把每个地址的值赋给我们约定好的key,然后转为数组对象
  • 通过http请求拿到的数据能够直接解析
  • 高度可定制化

撸起袖子干

净化原始数据

我们将Excel一行约定为 row , 列约定为 cel

若一个Excel中一个sheet的内容如下:

三餐 主菜 副菜
早餐 油条 豆浆
午餐 小炒肉 鸡蛋汤
晚餐 大炒肉 番茄汤

我并不希望拿到第一行的列标题三餐, 主菜, 副菜, 它应该作为每一组对象的key。

我希望的是这样的, 约定一套规则:

[
  'dinner(三餐)',
  'mail(主菜)',
  'sub(副菜)'
]

能够直接生成我想要的数组对象

[
  {
    dinner: "早餐",
    mail: "油条",
    sub: "豆浆"
  },
  {
    dinner: "午餐",
    mail: "小炒肉",
    sub: "鸡蛋汤"
  },
  {
    dinner: "晚餐",
    mail: "大炒肉",
    sub: "番茄汤"
  }
]

xlsx默认是 utf8+BOM(EF BB BF)utf16 编码,通常我们readFile或者http.request收到的数据会长这样:

<Buffer 50 4b 03 04 14 00 06 00 08 00 00 00 21 00 42 3b 3e c9 59 01 00 00 90 04 00 00 13 00 08 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值