有时候管理员需要把数据库中的数据导出来,方便管理员查看核对数据,本小节演示如何在云函数中使用node-xlsx类库把数据生成excel。整个过程分为以下几个过程:(1) 创建云函数,并安装node-xlsx类库;(2) 读取数据库集合中的所有数据;(3) 通过node-xlsx类库把数据写入excel;(4) 把生成的excel文件上传到云存储,供微信小程序端下载浏览。
- 通过node-xlsx类库把数据写入数据库
可以使用node-xlsx中的xlsx.build([{name: excelname, data: exceldata}])生成excel文件,其中name参数为需要生成的excel名称,data是一个二维数组,每个元素对应一个单元格。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | //1,定义excel表格名 let excelname = Math.floor(10000* Math.random())+'test.xlsx' //2,定义存储数据的 let exceldata = []; let row = ['设备ID', '设备名称', '领用人', '产家', '存放地', '价格', '购买日期', '供货商']; //表属性 exceldata.push(row); //console.log(dbdata.data) for (let item of dbdata.data) { let arr = []; arr.push(item.deviceid); arr.push(item.devicename); arr.push(item.deviceuser); arr.push(item.manufacturer); arr.push(item.place); arr.push(item.price); arr.push(item.purchasedate); arr.push(item.supplier); exceldata.push(arr) } // console.log(exceldata) //3,把数据保存到excel里 var buffer = await xlsx.build([{ name: excelname, data: exceldata }]); |
代码第2行,采用随机数+test.xls方式生成excel名称,防止多次生成excel在存储中出现命名冲突,这里采用逐行数据写入exceldata,其中第5行写入excel第一样数据的title;代码第8-19行把每条记录转行成excel中的一行数据,代码22-25生成excel。
最后为了提供微信小程序用户下载,需要把生成的excel文件上传至云存储,代码如下:
1 2 3 4 | await cloud.uploadFile({ cloudPath: excelname, fileContent: buffer, //excel二进制文件 }) |
详细云函数将数据库数据生成excel介绍见微信小程序云开发超详细实战攻略:https://item.jd.com/13038316.html