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

咱们在作小程序开发的过程当中,可能会有这样的需求,就是把咱们云数据库里的数据批量导出到excel表里。若是直接在小程序里写是实现不了的,因此咱们要借助小程序的云开发功能了。这里须要用到云函数,云存储和云数据库。能够说经过这一个例子,把咱们微信小程序云开发相关的知识都用到了。node

老规矩,先看效果图

上图就是咱们保存用户数据到excel生成的excel文件。

实现思路

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

一,建立excel云函数

关于云函数的建立,我这里很少说了。若是你连云函数的建立都不知道,建议你去小程序云开发官方文档去看看。或者看下我录制的云开发入门的视频:edu.csdn.net/course/deta…数据库

建立云函数时有两点须要注意的,给你们说下

  • 1,必定要把app.js里的环境id换成你本身的
  • 2,你的云函数目录要选择你对应的云开发环境(一般这里默认选中的) 不过你这里的云开发环境要和你app.js里的保持一致

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

咱们第一步建立好云函数之后,能够先在云函数里读取咱们的云数据库里的数据。npm

  • 1,先看下咱们云数据库里的数据
  • 2,编写云函数,读取云数据库里的数据(必定要记得部署云函数)
  • 3,成功读取到数据

把读取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文件的类库 node-xlsx

经过上面第二步能够看到咱们已经成功的拿到须要保存到excel的源数据,咱们接下来要作的就是把数据保存到excel小程序

  • 1,安装node-xlsx类库
    这一步须要咱们事先安装node,由于咱们要用到npm命令,经过命令行
npm install node-xlsx
复制代码

能够看出咱们安装完成之后,多了一个package-lock.json的文件 微信小程序

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

下图是咱们的核心代码 数组

这里的数据是咱们查询的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换成你本身的。bash

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
其实到这里就差很少实现了基本的把数据保存到excel里的功能了,可是咱们要下载excel,总不能每次都去云开发后台吧。因此咱们接下来要动态的获取这个下载地址。

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

经过上图咱们能够看出,咱们获取下载连接须要用到一个fileID,而这个fileID在咱们保存excel到云存储时,有返回,以下图。咱们把fileID传给咱们获取下载连接的方法便可。

  • 1,咱们获取到了下载连接,接下来就要把下载连接显示到页面
  • 2,代码显示到页面之后,咱们就要复制这个连接,方便用户粘贴到浏览器或者微信去下载

下面把我这个页面的完整代码贴给你们

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的功能了。

文章有点长,知识点有点多,可是你们把这个搞会之后,就能够完整的学习小程序云开发的:云函数,云数据库,云存储了。能够说这是一个综合的案例。

有什么不懂的地方,或者有疑问的地方,请在文章底部留言,我看到都会及时解答的。后面我还会出一系列关于云开发的文章,敬请关注。

相关文章
相关标签/搜索