最近在做一个功能就是把云数据库的信息导出到excel表格并复制下载链接的功能,因为之前没有做过这个功能,所以又是老办法,开始了百度,通过了长达1个小时的百度,终于找到了一个朋友分享的例子可以用了,聂大哥 ,非常感谢他的分享,
我们将分为以下几个步骤:
1、安装导出Excel表格的模块 2、编写云函数代码 3、导出表格并复制下载链接
1、安装导出Excel表格的模块
这里要讲一下,安装的模块的命令,一定要带在 --save 因为只有加了这个才能安装到package.json里面,我看了上面大哥没有带--save,模块没有安装上去,导致调用函数方法报找不到node-xlsx模块
npm install node-xlsx --save
2、编写云函数代码
打开index.js文件,下面代码要改的就是云开发环境,改成自己的,表格头要改,内容字段要改
const cloud = require('wx-server-sdk')
cloud.init({
env: "yiyu-bg-ng5x2" //编写云开发环境
})
const xlsx = require('node-xlsx') //导入Excel类库
const db = cloud.database() //声明数据库对象
const _ = db.command
exports.main = async (event, context) => { //主函数入口
console.log('event', event,context)
try {
let StuInfo = null
if(event.openid) {
StuInfo = await db.collection('devicesetList').where({
openId: event.openid
}).get() //将获取到的数据对象赋值给变量,接下来需要用该对象向Excel表中添加数据
} else {
StuInfo = await db.collection('devicesetList').get()
}
let dataCVS = `studentInfo-${Math.floor(Math.random()*1000000000)}.xlsx`
//声明一个Excel表,表的名字用随机数产生
let alldata = [];
let row = ['设备名', 'IMEI号','经度','纬度','设备地址','添加人','手机号','添加时间','openId']; //表格的属性,也就是表头说明对象
alldata.push(row); //将此行数据添加到一个向表格中存数据的数组中
//接下来是通过循环将数据存到向表格中存数据的数组中
for (let key = 0; key<StuInfo.data.length; key++) {
let arr = [];
arr.push(StuInfo.data[key].name);
arr.push(StuInfo.data[key].imei);
arr.push(StuInfo.data[key].lng );
arr.push(StuInfo.data[key].lat);
arr.push(StuInfo.data[key].address);
arr.push(StuInfo.data[key].nickName);
arr.push(StuInfo.data[key].phone);
arr.push(StuInfo.data[key].time);
arr.push(StuInfo.data[key].openId);
alldata.push(arr)
}
var buffer = await xlsx.build([{
name: "mySheetName",
data: alldata
}]);
//将表格存入到存储库中并返回文件ID
return await cloud.uploadFile({
cloudPath: dataCVS,
fileContent: buffer, //excel二进制文件
})
} catch (error) {
console.error(error)
}
}
3、导出表格并复制下载链接
注释代码的直接打开excel表格,刚开始的需求就是直接打开,后面又变成了下载excel需求,所以保留下来了,呵呵!
// 导出数据
exportTap(e) {
console.log('e', e)
this.setData({
exportSwidth: true
})
let exportOpenId = this.data.exportOpenId
console.log('exportOpenId', exportOpenId)
util.showLoading('正在生成xlsx表格地址')
wx.cloud.callFunction({
name:"StuExcel",
data:{
openid:exportOpenId
},
complete:res=>{
console.log('res callFunction', res)
wx.cloud.getTempFileURL({ //获取文件下载地址(24小时内有效)
fileList:[res.result.fileID],
success:res=>{
util.hideLoading()
console.log('getTempFileURL', res)
this.setData({
tempFileURL:res.fileList[0].tempFileURL,
showUrl:true
})
wx.setClipboardData({ //复制刚获取到链接,成功后会自动弹窗提示已复制
data:this.data.tempFileURL,
success: (res) => {
this.setData({
exportSwidth: false
})
wx.getClipboardData({
success (res) {
wx.showModal({
title: '提示',
content: '生成xlsx表格地址复制成功,在浏览器中粘贴地址即可下载',
success: function (res) {
if (res.confirm) {
console.log('确定')
} else if (res.cancel) {
console.log('取消')
}
}
})
console.log(res.data) // data
}
})
}
})
// wx.downloadFile({
// url: this.data.tempFileURL,
// success: res => {
// util.hideLoading()
// console.log('downloadFile res', res)
// var filePath = res.tempFilePath
// wx.openDocument({
// filePath: filePath, //文件路径,可通过 downFile 获得,
// fileType: 'xlsx',
// showMenu: true,// 是否显示右上角菜单
// success: res => {
// console.log('打开文档成功',res)
// },
// fail: err => {
// console.log('err,openDocument',err)
// }
// });
// },
// fail: err => {
// util.hideLoading()
// console.log('downloadFile err', err)
// }
// })
},
fail: err => {
util.hideLoading()
console.log('err getTempFileURL', err)
}
})
},
fail: err => {
util.hideLoading()
console.log('err callFunction', err)
}
})
}
最后
还要要感谢那些分享的朋友,我的工作带来方便,所以我也会乐意把自己的东西分享,也让可以方便别的朋友,同时在整理分享的内容也是对这个知识的加深, 如果觉得有帮助的话,记得点赞加关注,谢谢了!!!