微信小程序导出云数据库的数据为excel,wxml实现下载(避坑点)
记录个人借用大佬代码导出excel产生的问题解读
·
一、安装生成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
}
})
}
})
},
})
更多推荐
已为社区贡献1条内容
所有评论(0)