全网最详细微信小程序云开发导出excel表格

前言

在进行微信小程序的云开发时,我们有时候可能需要将云数据库内的数据以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:导出数据时,查询到的导出状态为”等待“。这是因为云开发的数据库导出需要一定的时间,我们必须等到其完成时才能获取到下载地址。解决办法:设置一个较长的延时器等待数据导出完毕再去取值,当然,这是一种治标不治本的方法,正确的方法应该是设置一个定时器,每隔多少毫秒去查询一次导出状态,直至其不为等待中。

感谢观看。

要在微信小程序导出Excel表格上加水印,可以使用以下步骤: 1. 在Excel中创建一个水印图片或文字,并将其保存为PNG格式的文件。 2. 在微信小程序中,使用wx.downloadFile()方法下载Excel文件。 3. 使用js-xlsx库将下载的Excel文件转换为可编辑的对象。 4. 在对象中添加水印。具体做法可以是在单元格中添加图片或文本,或在单元格的背景中添加图片。 5. 使用js-xlsx库将编辑后的对象转换回Excel文件。 6. 使用wx.saveFile()方法保存编辑后的Excel文件。 以下是一个示例代码片段,演示如何在微信小程序中添加水印: ```javascript const XLSX = require('xlsx') // 下载Excel文件 wx.downloadFile({ url: 'http://example.com/example.xlsx', success: function(res) { // 将文件读取为可编辑对象 const workbook = XLSX.read(res.tempFilePath, { type: 'file' }) const sheetName = workbook.SheetNames[0] const worksheet = workbook.Sheets[sheetName] // 添加水印图片 const watermark = wx.getFileSystemManager().readFileSync('watermark.png', 'base64') const watermarkImage = XLSX.utils.sheet_add_image(worksheet, watermark, { tl: { col: 0, row: 0 }, br: { col: 5, row: 5 } }) // 保存编辑后的Excel文件 const editedWorkbook = XLSX.write(workbook, { bookType: 'xlsx', type: 'binary' }) wx.saveFile({ tempFilePath: window.URL.createObjectURL(new Blob([editedWorkbook], { type: 'application/octet-stream' })), success: function(res) { console.log('Excel文件已保存:', res.savedFilePath) } }) } }) ``` 请注意,上述代码中的水印图片需要您自己创建,并将其保存为PNG格式的文件。此外,代码中还假定Excel文件只有一个工作表,如果文件中有多个工作表,则需要根据实际情况进行修改。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易烊子豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值