前言
在进行微信小程序的云开发时,我们有时候可能需要将云数据库内的数据以excel表格的形式导出。但是目前在普遍流传一种使用云函数的方法进行处理的方法。我在进行多次尝试后,均不能成功,我所使用的为先将excel表格生成并上传至云存储内,再对云存储内的表格进行处理。其中,对于表格的上传至云存储具体请参考wx.cloud.uploadFile | 微信开放文档。同时,微信小程序云开发也对导出数据有相关的文档databaseMigrateExport | 微信开放文档。如果你不愿意看我的文章,也可以直接跳转到官方文档学习如何导出。因为我就是参考了官方文档进行的导出。
当然,如果你直接观看官方文档,那么你很有可能会踩到坑,这里还是希望你能观看我的文章。
具体代码:
wx.request({//先获取token
url: 'https://api.weixin.qq.com/cgi-bin/token',
data:{
grant_type:"client_credential",
appid:"wxd65bc8624b9cb26c",
secret:this.data.secret,//小程序的密钥
},
success:(res)=>{
this.setData({
ACCESS_TOKEN:res.data.access_token
})
wx.showLoading({
title: '导出中',
})
wx.request({//导出excel表格
url: 'https://api.weixin.qq.com/tcb/databasemigrateexport?access_token='+res.data.access_token,
method:"POST",
data:{
env:"cloud1-8g88f6d25e8f2bf7",
file_path:"test_export.csv",
file_type:2,
query:"db.collection(\'user\').where({p_st:_.neq(0)}).field({ name: true,p_st:true }).get()"
},
success:(res)=>{
setTimeout(()=>{//设置延时器待导出成功
wx.request({
url: 'https://api.weixin.qq.com/tcb/databasemigratequeryinfo?access_token='+this.data.ACCESS_TOKEN,
method:"POST",
data:{
env:"cloud1-8g88f6d25e8f2bf7",
job_id:res.data.job_id
},
success:(res)=>{
wx.hideLoading()
if(res.data.record_success==0){
wx.showToast({
title: '导出的数据为0',
})
} else{
wx.showToast({
title: '导出成功',
})
this.setData({
file_url:res.data.file_url
})
}
},
})
},10000)
}
})
}
})
代码解释
在上诉代码中,我们的具体步骤大致为:获取access_token——》使用获取到的access_token与该小程序的密钥进行数据库的导出——》拿到导出的任务id查询导出进度——》当导出进度为成功时,复制下载地址。
其中env为自己的开发环境,file_type为导出的文件格式,当值为2时表示以excel格式导出,query为自己的条件查询语句。
易错点
在导出时,大家可能会遇到以下两个问题。
1:小程序密钥直接放在代码内在代码质量检查时不通过。这是因为小程序密钥为敏感信息,不能直接出现在小程序内。解决办法:将小程序密钥存放与云数据库中,并在使用时查询出来。
2:导出数据时,查询到的导出状态为”等待“。这是因为云开发的数据库导出需要一定的时间,我们必须等到其完成时才能获取到下载地址。解决办法:设置一个较长的延时器等待数据导出完毕再去取值,当然,这是一种治标不治本的方法,正确的方法应该是设置一个定时器,每隔多少毫秒去查询一次导出状态,直至其不为等待中。
感谢观看。