咱们在开发小程序的过程当中,可能会有这样的需求:如何将云数据库里的数据批量导出到excel表里?
这个需求能够用强大的云开发轻松实现!
这里须要用到云函数,云存储和云数据库。能够说经过这一个例子,把小程序云开发相关的知识都用到了。下面就来介绍如何实现
关于如何建立云开发小程序,这里我就再也不作具体讲解。不知道怎么建立云开发小程序的同窗,能够去翻看腾讯云云开发公众号内菜单【技术交流-视频教程】中的教学视频。node
不过你这里的云开发环境要和你app.js里的保持一致数据库
咱们第一步建立好云函数之后,能够先在云函数里读取咱们的云数据库里的数据。npm
把读取user数据表的完整代码给你们贴出来。json
// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init({ env: "test-vsbkm" }) // 云函数入口函数 exports.main = async(event, context) => { return await cloud.database().collection('users').get(); }
经过上面第二步能够看到咱们已经成功的拿到须要保存到excel的源数据,咱们接下来要作的就是把数据保存到excel小程序
这一步须要咱们事先安装node,由于咱们要用到npm命令,经过命令行数组
npm install node-xlsx
能够看出咱们安装完成之后,多了一个package-lock.json的文件浏览器
下图是咱们的核心代码:
这里的数据是咱们查询的users表的数据,而后经过下面代码遍历数组,而后存入excel。这里须要注意咱们的id,name,weixin要和users表里的对应。微信
for (let key in userdata) { let arr = []; arr.push(userdata[key].id); arr.push(userdata[key].name); arr.push(userdata[key].weixin); alldata.push(arr) }
还有下面这段代码,是把excel保存到云存储用的app
//4,把excel文件保存到云存储里 return await cloud.uploadFile({ cloudPath: dataCVS, fileContent: buffer, //excel二进制文件 })
下面把完整的excel里的index.js代码贴给你们,记得把云开发环境id换成你本身的。async
const cloud = require('wx-server-sdk') //这里最好也初始化一下你的云开发环境 cloud.init({ env: "test-vsbkm" }) //操做excel用的类库 const xlsx = require('node-xlsx'); // 云函数入口函数 exports.main = async(event, context) => { try { let {userdata} = event //1,定义excel表格名 let dataCVS = 'test.xlsx' //2,定义存储数据的 let alldata = []; let row = ['id', '姓名', '微信号']; //表属性 alldata.push(row); for (let key in userdata) { let arr = []; arr.push(userdata[key].id); arr.push(userdata[key].name); arr.push(userdata[key].weixin); alldata.push(arr) } //3,把数据保存到excel里 var buffer = await xlsx.build([{ name: "mySheetName", data: alldata }]); //4,把excel文件保存到云存储里 return await cloud.uploadFile({ cloudPath: dataCVS, fileContent: buffer, //excel二进制文件 }) } catch (e) { console.error(e) return e } }
通过上面的步骤,咱们已经成功的把数据存到excel里,并把excel文件存到云存储里。能够看下效果。
接着,就能够经过上图的下载地址下载excel文件了。
其实到这里就差很少实现了基本的把数据保存到excel里的功能了,可是为了不每次导出数据都须要去云开发后台下载excel的麻烦,接下来介绍如何动态获取下载地址。
经过上图咱们能够看出,咱们获取下载连接须要用到一个fileID,而这个fileID在咱们保存excel到云存储时,有返回,以下图。咱们把fileID传给咱们获取下载连接的方法便可。
下面是完整代码:
Page({ onLoad: function(options) { let that = this; //读取users表数据 wx.cloud.callFunction({ name: "getUsers", success(res) { console.log("读取成功", res.result.data) that.savaExcel(res.result.data) }, fail(res) { console.log("读取失败", res) } }) }, //把数据保存到excel里,并把excel保存到云存储 savaExcel(userdata) { let that = this wx.cloud.callFunction({ name: "excel", data: { userdata: userdata }, success(res) { console.log("保存成功", res) that.getFileUrl(res.result.fileID) }, fail(res) { console.log("保存失败", res) } }) }, //获取云存储文件下载地址,这个地址有效期一天 getFileUrl(fileID) { let that = this; wx.cloud.getTempFileURL({ fileList: [fileID], success: res => { // get temp file URL console.log("文件下载连接", res.fileList[0].tempFileURL) that.setData({ fileUrl: res.fileList[0].tempFileURL }) }, fail: err => { // handle error } }) }, //复制excel文件下载连接 copyFileUrl() { let that=this wx.setClipboardData({ data: that.data.fileUrl, success(res) { wx.getClipboardData({ success(res) { console.log("复制成功",res.data) // data } }) } }) } })
梳理下上面代码的逻辑:
到这里咱们就完整的实现了把数据保存到excel的功能了。
文章有点长,知识点有点多,可是你们理解上述内容后,就能够对小程序云开发的云函数、云数据库、云存储有一个较为完整的了解过程。
若是你想要了解更多关于云开发CloudBase相关的技术故事/技术实战经验,请扫码关注【腾讯云云开发】公众号~!