众多的库中,能够很轻松的找到解析xlsx, csv格式文件的第三方库,并且有许多质量不错的库,如
node-xlsx
,excel-parser
,excel-export
等,都能够帮助我们解析或者生成xlsx, csv文件,但是大部分都局限于文件
背景
在实际的生产环境中,为了避免大量的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