云开发实战:小程序导出Ecxcl表格功能
发布于 3 年前 作者 jing73 3728 次浏览 来自 分享

需求

作为信息收集者需要把用户填写的内容,用Ecxcl表格的方式导出。可以支持在线查看或者复制文件下载链接。

  1. 查看 excle 表格可以直接在手机上查看表格
  2. 复制下载地址可以通过链接在电脑上下载

实现

以收集姓名信息为例:

云函数代码

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

cloud.init()

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

// 云函数入口函数
exports.main = async (event, context) => {
  try {
    let {
      dataList,
      excelName
    } = event

    // 1. 定义excel表格名
    let dataCVS = 'test.xlsx'
    // 2. 定义存储数据的
    let alldata = [];
    // 3. 定义表头
    let row = ['姓名']; 
    alldata.push(row);
   // 4. 循环取出姓名数据
      for (let key in dataList) {
        let arr = [];
        arr.push(applyList[key].name);
        alldata.push(arr)
      }
    //5. 把数据保存到excel里
    var buffer = await xlsx.build([{
      name: "mySheetName",
      data: alldata
    }]);
    //6. 把excel文件保存到云存储里
    return await cloud.uploadFile({
      cloudPath: excelName + ".xlsx",
      fileContent: buffer, 
    })

  } catch (e) {
    console.error(e)
    return e
  }
}

注意上传部署云函数的时候需要先安装node-xlsx

安装步骤:

  1. 打开命令行
  2. 输入安装命令:npm install node-xlsx --save

小程序调用代码

  1. 通用调用云函数生成表格代码部分
createExcel(type) {
  // 提示加载中
    wx.showLoading({
      title: '正在加载中...',
    })

    console.log('请求获取')
    let data = {
      dataList: 姓名数据集合,
      excelName: 文件名
    }
    // 生成excel并存储
    wx.cloud.callFunction({
      name: 'excel',
      data: data
    }).then(res => {
     // 获取存储文件ID
      this.getFileUrl(res.result.fileID,type)
    })

  }
  1. 根据不同的type来实现不同的功能
    2.1 type为0时查看excel
    2.2 type为1时复制地址
  getFileUrl(fileID, type) {
    let that = this;
    wx.cloud.getTempFileURL({
      fileList: [fileID],
      success: res => {
        // get temp file URL
        that.setData({
          fileUrl: res.fileList[0].tempFileURL
        })
        // 下载文件并且打开文档
        if (type == 0) {
          wx.downloadFile({
            url: res.fileList[0].tempFileURL,
            success: function (res) {
              const filePath = res.tempFilePath
              wx.openDocument({
                filePath: filePath
              })
            }
          })
        } else if (type == 1) {
        // 复制地址
          wx.setClipboardData({
            data: res.fileList[0].tempFileURL
          })
        }
      }
    })
  },

扩展阅读

以上涉及到的API文档地址:
node-xlsx
wx.setClipboardData
wx.uploadFile
wx.downloadFile
wx.openDocument

回到顶部