云环境1.0.51
小程序的云开发功能为我们带来了很大的方便,于是就打算研究一下如何在云函数中拉取数据,之后生成excel到云存储中,过程中踩了些坑,这里分享给大家,希望能有所帮助。
首先了解一个node生成excel的库excel-export
虽然已经许久未更新了,但是目前还没有什么太大的问题,所以在他的基础上进行开发,并且上手也比较容易
主要用法
- 引入
let nodeExcel = require('excel-export');
- 创建配置对象
let conf = {
stylesXmlFile, // 约束文件(不然生成的excel打开会报一些问题)
cols, // 可理解为表头 [{ caption: 'columnName', type: 'string' }], 这里出于方便,type为string,具体可移步其文档查看
rows, // 可以理解为填充的数据 ['wechat', 'mp']
}
- 创建流对象
let result = nodeExcel.execute(conf)
// 普通node后端可以直接使用 res.end(result, 'binary'); 进行下载,要记得添加相应的头,其文档里也有说明
// 最终可以使用 Buffer.from(result.toString(), 'binary') 转换为一个Buffer对象
嵌入云开发
大致的思路就是 [拉取数据] -> [生成excel流对象] -> [上传到云存储中] -> [返回该fileID]
几个踩坑点
- 读入文件要使用
path.resolve(__dirname, 'xxx')
- 得到excel流对象 使用
Buffer.from(result.toString(), 'binary')
再配合cloud.uploadFile
- 生成时conf要配置
stylesXmlFile
,不然打开文件总有个提示,很不爽!,styles.xml
这个文件可以在node_modules/excel-export/example/styles.xml
找到。 - 数据和表头最好是对应的,数据也可以存在空值
云函数目录结构
- testDownload
- |- index.js
- |- styles.xml
- |- package.json
- |- package-lock.json
- |- node_modules