微信小程序导出云数据库的数据为excel,wxml实现下载(避坑点)

一、安装生成excel文件的类库 node-xlsx(需要提前安装node.js)

npm install node-xlsx

坑一:缺失package-lock.json文件

解决:进入终端,右击对应云函数,选择进入终端,输入如下命令

npm install --production

坑二:一定要记得编写完函数之后上传

二、云函数代码内容避坑(有前人代码,这里作为参考)

创建一个云函数之后,在相应的index.js文件内填入如下代码后上传

这里涉及到了传参,我是传入了在对应page的js获取的数据,然后通过云函数进行写入excel与上传云储存。传参通过: event.参数名

const cloud = require('wx-server-sdk')
//这里最好也初始化一下你的云开发环境
cloud.init({
  env: "自己环境的env"
})
//操作excel用的类库
const xlsx = require('node-xlsx');
// 云函数入口函数
exports.main = async(event, context) => {
  try {
    let userdata = event.userdata //传入使用这个函数的页面传送来的数据   
    //1,随机生成表格名字
    let dataCVS = `T_student-${Math.floor(Math.random()*1000000000)}.xlsx`
    //2,定义存储数据的
    let alldata = [];
    let row = ['抽取级次', '抽取时间','导师姓名','学生姓名','学生ID'];  //表属性
    alldata.push(row);
    for (let key in userdata) {
      let arr = [];
      arr.push(userdata[key].count);
      arr.push(userdata[key].time);
      arr.push(userdata[key].tname);
      arr.push(userdata[key].sname);
      arr.push(userdata[key].sid);
      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
  }
}

二、page页面的js代码内容避坑(有前人代码,这里作为参考)

这里的坑是传参,注意wx.cloud.callFunction({})中data后跟随的是引用函数名字与传入参数,传入参数名字自定义不做要求,这里传入array型数据即可。

Page({

  /**
   * 页面的初始数据
   */
  data: {
    cs:[],//存放数据,可以自己在这个页面进行加载时读取数据库然后存入cs中
    fileUrl: ""//存储url
  },
  //把数据保存到excel里,并把excel保存到云存储
//我这里在wxml里面设置了button,来主动点击实现功能
 savaExcel() {
  let that = this
  wx.cloud.callFunction({
    name: "自己云函数的名字",
    data: {
      '自定义传入参数': that.data.cs//冒号后面跟传入的数据
    },
    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
    }
  })
  wx.showToast({
    title: '请稍等几秒钟后复制文件下载链接',
    icon: 'success',
    duration: 2000
    })
},
//复制excel文件下载链接
copyFileUrl() {
  let that=this
  wx.setClipboardData({
    data: that.data.fileUrl,
    success(res) {
      wx.getClipboardData({
        success(res) {
          console.log("复制成功",res.data) // data
        }
      })
    }
  })
},

})

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值