博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
借助云开发轻松实现后台数据批量导出丨实战
阅读量:5125 次
发布时间:2019-06-13

本文共 4306 字,大约阅读时间需要 14 分钟。

小程序导出数据到excel表,借助云开发后台实现excel数据的保存

我们在开发小程序的过程中,可能会有这样的需求:如何将云数据库里的数据批量导出到excel表里?

这个需求可以用强大的云开发轻松实现!
这里需要用到云函数,云存储和云数据库。可以说通过这一个例子,把小程序云开发相关的知识都用到了。下面就来介绍如何实现

实现思路

  • 1,创建云函数
  • 2,在云函数里读取云数据库里的数据
  • 3,安装node-xlsx类库(node类库)
  • 4,把云数据库里读取到的数据存到excel里
  • 5,把excel存到云存储里并返回对应的云文件地址
  • 6,通过云文件地址下载excel文件

一、创建excel云函数

关于如何创建云开发小程序,这里我就不再做具体讲解。不知道怎么创建云开发小程序的同学,可以去翻看腾讯云云开发公众号内菜单【技术交流-视频教程】中的教学视频。

创建云函数时有两点需要注意的,给大家说下

  • 1、一定要把app.js里的环境id换成你自己的
    format,png#pic_center
  • 2,你的云函数目录要选择你对应的云开发环境(通常这里默认选中的)
    不过你这里的云开发环境要和你app.js里的保持一致
    format,png#pic_center

二、读取云数据库里的数据

我们第一步创建好云函数以后,可以先在云函数里读取我们的云数据库里的数据。

  • 1、先看下我们云数据库里的数据
    format,png#pic_center
  • 2、编写云函数,读取云数据库里的数据(一定要记得部署云函数)
    format,png#pic_center
  • 3、成功读取到数据
    format,png#pic_center

把读取user数据表的完整代码给大家贴出来。

// 云函数入口文件const cloud = require('wx-server-sdk')cloud.init({  env: "test-vsbkm"})// 云函数入口函数exports.main = async(event, context) => {  return await cloud.database().collection('users').get();}

三、安装生成excel文件的类库 node-xlsx

通过上面第二步可以看到我们已经成功的拿到需要保存到excel的源数据,我们接下来要做的就是把数据保存到excel

  • 1、安装node-xlsx类库
    format,png#pic_center
    这一步需要我们事先安装node,因为我们要用到npm命令,通过命令行
npm install node-xlsx

format,png#pic_center

可以看出我们安装完成以后,多了一个package-lock.json的文件

format,png#pic_center

四、编写把数据保存到excel的代码,

下图是我们的核心代码:

format,png#pic_center
这里的数据是我们查询的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保存到云存储用的

//4,把excel文件保存到云存储里    return await cloud.uploadFile({      cloudPath: dataCVS,      fileContent: buffer, //excel二进制文件    })

下面把完整的excel里的index.js代码贴给大家,记得把云开发环境id换成你自己的。

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文件存到云存储里。可以看下效果。

format,png#pic_center
接着,就可以通过上图的下载地址下载excel文件了。
format,png#pic_center
其实到这里就差不多实现了基本的把数据保存到excel里的功能了,但是为了避免每次导出数据都需要去云开发后台下载excel的麻烦,接下来介绍如何动态获取下载地址。

六、获取云文件地址下载excel文件

format,png#pic_center

通过上图我们可以看出,我们获取下载链接需要用到一个fileID,而这个fileID在我们保存excel到云存储时,有返回,如下图。我们把fileID传给我们获取下载链接的方法即可。
format,png#pic_center

  • 1、我们获取到了下载链接,接下来就要把下载链接显示到页面
    format,png#pic_center
  • 2、代码显示到页面以后,我们就要复制这个链接,方便用户粘贴到浏览器或者微信去下载。
    format,png#pic_center

下面是完整代码:

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          }        })      }    })  }})

梳理下上面代码的逻辑:

  • 1、先通过getUsers云函数去云数据库获取数据。
  • 2、把获取到的数据通过excel云函数把数据保存到excel,然后把excel保存的云存储。
  • 3、获取云存储里的文件下载链接。
  • 4、复制下载链接,到浏览器里下载excel文件。

到这里我们就完整的实现了把数据保存到excel的功能了。

文章有点长,知识点有点多,但是大家理解上述内容后,就可以对小程序云开发的云函数、云数据库、云存储有一个较为完整的了解过程。


如果你想要了解更多关于云开发CloudBase相关的技术故事/技术实战经验,请扫码关注【腾讯云云开发】公众号~

1649686-20190910100058765-928588516.png

转载于:https://www.cnblogs.com/CloudBase/p/11495819.html

你可能感兴趣的文章
java面试题
查看>>
提高码力专题(未完待续)
查看>>
pair的例子
查看>>
前端框架性能对比
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
STM32F10x_RTC秒中断
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
牛的障碍Cow Steeplechase
查看>>