背景
在做随手记账本项目的时候,很多网友在意见反馈中建议提供导出功能。由于小程序的后台是基于node
的,于是在npm里找了下关于excel的包,也参考了百度建议,推荐比较多的是excelexport
,但是我最后选了exceljs
。主要是一直在持续更新,文档也很全面。
思路
由于后台数据库保存的账本数据是采用json
格式的,最简单的方法就是通过遍历账本中的所有条目逐行写入excel。但是发现在exceljs
这个包中,是提供列定义的,通过定义每列的key
,就可以直接把json
数据写入了,这个功能非常赞。
这部分的文档说明如下:
1 | // Add column headers and define column keys and widths |
需要说明的说,文档里定义的column
里的header
,会自动写在表格的第一行当做表头,不需要另起一行。
实现
主要有这么几个步骤:
- 新建workbook对象
- 新建sheet
- 定义column
- 写入row
- 导出
代码如下:
1 | const Excel = require('exceljs') |
注意
- 一般node默认是异步执行的,如有后续操作(比如先生成excel文件之后,以附件的形式发送),那么就需要在最后一步保存文件的代码前面加上
await
。
1 | await workbook.xlsx.writeFile("随手记账本.xlsx") |
- 如果生成之后,处理完了要删除的话,可以使用
fs.unlink
来删除。但注意的是,这个unlink
也是一个异步函数,删除效果会有延迟。 - 其他关于
exceljs
的操作,可以参考原文档,还是相当丰富的。
https://www.npmjs.com/package/exceljs