小程序云开发数据库导出Excel

大祥子
2021-06-03 / 0 评论 / 979 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年06月03日,已超过1267天没有更新,若内容或图片失效,请留言反馈。

 最近使用微信小程序云开发过程中,遇到了个导出数据表数据为excel的需求,查阅了下网上资料,教程很详细但是我跑不起来(因为原作用了两个云函数,我只需要用一个云函数),自己重新写了下,原教程为CSDN编程小石头编写 小程序导出数据到excel表,借助云开发后台实现excel数据的保存

1、新建云函数名称customize_excel,去往云函数目录下执行npm install node-xlsx安装cnpm也可,安装完成后会出现如下node_modules文件夹
kpgko1ik.png

2、打开customize_excel目录里的package.json,在dependencies下加入"node-xlsx":"latest",
kpgkqvde.png

3、开始编写云函数,代码如下

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: '此处为你的云环境' })
// 连接上云环境
const db = cloud.database({ env: '此处为你的云环境' })
// 定义数据表
const signInColletion = db.collection("signIn")
const _ = db.command

//操作excel用的类库
const xlsx = require('node-xlsx');

// 云函数入口函数
exports.main = async (event, context) => {
  return signInColletion.where({
      // 按照指定的范围查询数据
      date:_.and(_.gte(event.start_date),_.lte(event.end_date))
    }).get().then(res => {
        // 获取查询的数据
      let userdata = res.data;
      //1,定义excel表格名
      let dataCVS = '自定义考勤数据.xlsx'
      //2,定义存储数据的
      let alldata = [];
      // 导出数据表属性
      let row = ['账号', '日期', '姓名', '部门', '早签', '午退', '午签', '晚退'];
      alldata.push(row);
          // 循环输出
      for (let key in userdata) {
        let arr = [];
        arr.push(userdata[key].account);
        arr.push(userdata[key].date);
        arr.push(userdata[key].username);
        arr.push(userdata[key].department);
        arr.push(userdata[key].morning_signIn);
        arr.push(userdata[key].morning_signInOut);
        arr.push(userdata[key].pm_signIn);
        arr.push(userdata[key].offDuty_signOut);
        alldata.push(arr)
      }
      //3,把数据保存到excel里
      var buffer = xlsx.build([{
        name: "mySheetName",
        data: alldata
      }]);
      //4,把excel文件保存到云存储里
      return cloud.uploadFile({
        cloudPath: dataCVS,
        fileContent: buffer, //excel二进制文件
      })
    })
}

4、上传云函数,开始编写页面代码,代码如下

    customize_btn(){
        //定义导出时间段
        var startDate = this.data.start_date
        var endDate = this.data.end_date
        // console.log("点击自定义导出"+startDate,endDate);
        let that = this;
        //读取users表数据
        wx.cloud.callFunction({
            name: "customize_excel",
            data: {
                //传值定义导出时间段
                start_date: startDate,
                end_date: endDate
            },
        }).then(res => {
                console.log("读取成功", res.result.fileID)
                that.getCustomizeFileUrl(res.result.fileID);
        })
        // 刷新当前页面
        that.onLoad();
        console.log("页面重载")
    },
    //获取云存储文件下载地址,这个地址有效期一天
    getCustomizeFileUrl(fileID) {
        let that = this;
        wx.cloud.getTempFileURL({
            fileList: [fileID],
        }).then(res => {
            console.log("文件下载链接", res.fileList[0].tempFileURL)
            that.setData({
                CustomizefileUrl: res.fileList[0].tempFileURL
            })
        })
    },
    //复制excel文件下载链接
    copyCustomizeFileUrl() {
        let that = this
        wx.setClipboardData({
            data: that.data.CustomizefileUrl,
            success(res) {
                wx.getClipboardData({
                    success(res) {
                        console.log("复制成功", res.data) // data
                    }
                })
            }
        })
    },

5、页面显示代码如下

        <view class="sign_in_card">
            <text class="sign_in_title">自定义导出</text>
            <!-- <view class="sign_in_list">
                <button class="export_btn">七日内数据</button>
            </view> -->
            <view class="sign_in_list">
                <view class="border_bt userInfoChange">
                    <text class="nav_left">起始时间</text>
                    <input type="text" placeholder="如:2021-5-23" bindinput='start_date' />
                </view>
            </view>
            <view class="sign_in_list">
                <view class="userInfoChange">
                    <text class="nav_left">结束时间</text>
                    <input type="text" placeholder="如:2021-6-1" bindinput='end_date' />
                </view>
            </view>
            <view class="sign_in_list">
                <button class="export_btn" bindtap="customize_btn">自定义导出</button>
            </view>
            <view class="sign_in_list">
                <view wx:if="{{CustomizefileUrl}}">
                    <button class="export_btn" bindtap='copyCustomizeFileUrl'>点我复制下载地址</button>
                    <view class="url">{{CustomizefileUrl}}</view>
                </view>
            </view>
        </view>

6、以上就是,我实现的导出excel功能,没写的那么细致,可以参照我的文章去看下提及的详细教程

0

评论 (0)

取消