Node读写Excel文件探究实践

简介
本文介绍用 Node.js 中的依赖库来处理 Excel 文件,深入分析对比常见npm库处理Excel 文件存在的优缺点,主要阐述用js-xlsx、excel-export 库来处理 Excel 文件。
思路
- 有哪些外部模块支持读写Excel
- 引入依赖模块
- 编写业务逻辑函数
- 实践应用
支持读写Excel的node.js模块
通过npm搜索,支持读写excel文件的模块有很多,但是都各有忧缺点,有些仅支持xls/xlsx的一种格式,有些仅支持读取数据,有些仅支持导出文件,有些需要依赖python解析。常见的npm依赖模块如下:
- js-xlsx: 目前 Github 上 star 数量最多的处理 Excel 的库,支持解析多种格式表格XLSX / XLSM / XLSB / XLS / CSV,解析采用纯js实现,写入需要依赖nodejs或者FileSaver.js实现生成写入Excel,可以生成子表Excel,功能强大,但上手难度稍大。不提供基础设置Excel表格api例单元格宽度,文档有些乱,不适合快速上手;
- node-xlsx: 基于Node.js解析excel文件数据及生成excel文件,仅支持xlsx格式文件;
- excel-parser: 基于Node.js解析excel文件数据,支持xls及xlsx格式文件,需要依赖python,太重不太实用;
- excel-export : 基于Node.js将数据生成导出excel文件,生成文件格式为xlsx,可以设置单元格宽度,API容易上手,无法生成worksheet字表,比较单一,基本功能可以基本满足;
- node-xlrd: 基于node.js从excel文件中提取数据,仅支持xls格式文件,不支持xlsx,有点过时,常用的都是XLSX 格式。
通过以上分析对比,本人比较推崇js-xlsx
、excel-export
来读写Excel文件,可以结合使用js-xlsx
解析Excel、excel-export
生成,效果更加,接下来分别实践js-xlsx
、excel-export
。
第一讲:利用 js-xlsx 处理 Excel 文件
安装
node中使用通过npm:
|
|
浏览器使用:
|
|
通过bower安装:
|
|
注意
,在客户端使用时,建议使用dist/xlsx.full.min.js
,包含了js-xlsx所有模块。
一些概念
在使用这个库之前,先介绍库中的一些概念。
- workbook 对象,指的是整份 Excel 文档。我们在使用 js-xlsx 读取 Excel 文档之后就会获得 workbook 对象。
- worksheet 对象,指的是 Excel 文档中的表。我们知道一份 Excel 文档中可以包含很多张表,而每张表对应的就是 worksheet 对象。
- cell 对象,指的就是 worksheet 中的单元格,一个单元格就是一个 cell 对象。
它们的关系如下:
|
|
用法
基本用法
1.用 XLSX.read
读取获取到的 Excel 数据,返回 workbook
2.用 XLSX.readFile
打开 Excel 文件,返回 workbook
3.用 workbook.SheetNames
获取表名
4.用 workbook.Sheets[xxx]
通过表名获取表格
5.用 worksheet[address]
操作单元格
6.用XLSX.utils.sheet_to_json
针对单个表获取表格数据转换为json格式
7.用XLSX.writeFile(wb, 'output.xlsx')
生成新的 Excel 文件
具体用法
读取 Excel 文件
|
|
获取 Excel 文件中的表
|
|
通过 worksheet[address]
来操作表格,以 ! 开头的 key 是特殊的字段。
|
|
获取 Excel 文件中的表转换为json数据
|
|
生成新的 Excel 文件
|
|
js-xlsx实战
解析 Excel 生成 JSON
|
|
导出表格
1.构建特定的数据结构,通过new Blob如下。
|
|
2.调用 XLSX.write, 借助FileSaver中new Blob生成即可。
|
|
实践Demo:RD快速生成excel表
第二讲:利用 excel-export 生成 Excel 文件
excel-export模块,上手起来就比较容易了,其中原理是通过修改,修改header 信息、拼接字符串、修改字符集、输出字符串的形式实现的,在部分firefox低版本下载中文名会出现乱码情况。我们只需要按照API设置好数据参数,通过nodeExcel.execute调用执行,系统调用模版”styles.xml”就可以生成Excel文件,比较好的就是,它可以设置单元格的宽度,类型。
我们先看看,官方提供的例子:
|
|
分析生成excel流程:
1.配置excel文件名conf.name
2.设置表caption,每列单元格数据类型,宽度
3.填充表中每行数据conf.rows,nodeExcel.execute生成数据结构,设置头部,拼接生成表
写在最后,以上仅为个人观点,如有纰漏之处,欢迎各位大侠拍砖!
参考资料:
- Node-Excel-Export excel导出
- node.js读写excel文件
- JS-XLSX读取和解析Excel表格文件(xls/xlsx)的JavaScript插件
- 在 Node.js 中利用 js-xlsx 处理 Excel 文件
- node-xlrd
- excel-parser
- FileSaver浏览器保存excel
- stackoverflow xlsx相关问题