全网微信小程序云开发之将云数据库信息导出到Excel表格并复制下载链接实例

599 阅读2分钟

最近在做一个功能就是把云数据库的信息导出到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)
       }
     })
 
  }

最后

还要要感谢那些分享的朋友,我的工作带来方便,所以我也会乐意把自己的东西分享,也让可以方便别的朋友,同时在整理分享的内容也是对这个知识的加深, 如果觉得有帮助的话,记得点赞加关注,谢谢了!!!