小程序云函数从云数据下载excal

简介: 该教程介绍了如何使用小程序云函数从云数据下载Excel文件。首先,创建名为`getexcal`的云函数,然后在终端中安装`node-xlsx`依赖。接着,编写云函数代码,从数据库中获取数据,利用`node-xlsx`生成Excel文件并上传至云端。在页面(index)中,提供下载和打开Excel的按钮。当点击“生成excel”时,调用云函数并获取文件下载地址,将其复制到剪贴板并弹出提示。最后,提醒注意每次更新云函数后需重新部署,并确保使用正确的云开发环境ID。

小程序云函数从云数据下载excal

@[toc]

看效果
image.png

1.新建云函数

image.png

2.部署依赖

在getexcal的云函数下面右键选择在终端打开

npm install node-xlsx
image.png

安装好的标志
image.png

3.云函数代码

const cloud = require('wx-server-sdk')
cloud.init({
   
   
    env: "school-5g4jy58j60c7811c"   //编写云开发环境
})
const xlsx = require('node-xlsx')    //导入Excel类库
const db = cloud.database()   //声明数据库对象
const _ = db.command
exports.main = async (event, context) => {
   
      //主函数入口
    try {
   
   
        let StuInfo = await db.collection('rundata').get()   //将获取到的数据对象赋值给变量,接下来需要用该对象向Excel表中添加数据
        let dataCVS = `studentInfo-${
   
   Math.floor(Math.random()*1000000000)}.xlsx`
        //声明一个Excel表,表的名字用随机数产生
        let alldata = [];
        let row = ['姓名', '标识','跑步时间','里程数','跑步日期']; //表格的属性,也就是表头说明对象
        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].openid);
            arr.push(StuInfo.data[key].runtime);
            arr.push(StuInfo.data[key].lichenshun);
            arr.push(StuInfo.data[key].pbrq);
            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)
    }
}

4.index

<view>
   <view class="info">学生信息的导出</view>
</view>
  <!-- 下载excel -->
  <view class="uploader" >
    <view class="uploader-text" bindtap="downloadexcel">
      <text>生成excel</text>
    </view>
  </view>
  <view wx:if="{
   
   {tempFileURL}}">
  <view class="uploader" >
    <view class="uploader-text" catchtap='downloadFile'>
      <text>打开excel</text>
    </view>
  </view>
</view>

5.js

// pages/runmessage/runmessage.js
Page({
   
   

  /**
   * 页面的初始数据
   */
  data: {
   
   
   url:'',
   tempFileURL:'',
   showUrl:false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
   
   

  },
  downloadexcel:function(){
   
   
  wx.cloud.callFunction({
   
   
    name:"getexcal",
    // data:{
   
   
    //   arropenid:arropenid
    // },
     complete:res=>{
   
   
       wx.cloud.getTempFileURL({
   
         //获取文件下载地址(24小时内有效)
         fileList:[res.result.fileID],
         success:res=>{
   
   
           this.setData({
   
   
             tempFileURL:res.fileList[0].tempFileURL,
             showUrl:true
           })
           wx.setClipboardData({
   
      //复制刚获取到链接,成功后会自动弹窗提示已复制
         data:this.data.tempFileURL,
         success (res) {
   
   
           wx.getClipboardData({
   
   
             success (res) {
   
   
               this.setData({
   
   
                 url:res.data
               })
               console.log(res.data) // data
             }
           })
         }
       })
         }
       })
     }
   })
  },




    //下载excel
 /**
* 下载文件并预览
*/
downloadFile: function(e) {
   
   
  console.log(e);
  let type = e.currentTarget.dataset.type;
  let url = e.currentTarget.dataset.url;
  switch (type) {
   
   
  case "pdf":
      url += 'pdf';
      break;
  case "word":
      url += 'docx';
      break;
  case "excel":
      url += 'xlsx';
      break;
  default:
      url += 'pptx';
      break;
  }
  wx.downloadFile({
   
   
      url: this.data.tempFileURL,
      header: {
   
   },
      success: function(res) {
   
   
          var filePath = res.tempFilePath;
          console.log(filePath);
          wx.openDocument({
   
   
              filePath: filePath,
              success: function(res) {
   
   
                  console.log('打开文档成功')
              },
              fail: function(res) {
   
   
                  console.log(res);
              },
              complete: function(res) {
   
   
                  console.log(res);
              }
          })
      },
      fail: function(res) {
   
   
          console.log('文件下载失败');
      },
      complete: function(res) {
   
   },
  })
},
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
   
   

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
   
   

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
   
   

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
   
   

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
   
   

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
   
   

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
   
   

  }
})

6.注意事项

每次云函数更新后都要部署。
不部署每次都会找不见或者是报错。
云函数的env一定要换成自己的appid

目录
相关文章
|
1月前
|
小程序 数据库
微信小程序访问云数据库
微信小程序访问云数据库
20 1
|
7月前
|
小程序 JavaScript API
小程序云开发实战六:云数据库读取的数据显示在小程序端列表里
小程序云开发实战六:云数据库读取的数据显示在小程序端列表里
109 0
|
1月前
|
JavaScript 小程序
微信小程序 wxml 中使用 js函数
微信小程序 wxml 中使用 js函数
98 0
|
13天前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的星空游戏购买下载平台附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的星空游戏购买下载平台附带文章和源代码部署视频讲解等
12 1
|
1月前
|
存储 弹性计算 小程序
小程序全栈开发中的云函数应用实践
【4月更文挑战第12天】本文探讨了小程序全栈开发中云函数的应用实践,云函数作为轻量级后端服务,具备弹性伸缩、安全可靠和跨平台支持等特点。开发者可利用云函数实现用户认证、数据存储、文件上传下载、第三方服务集成及定时任务等功能。实践中需注意性能优化、安全性及成本控制,以提升小程序性能和用户体验。通过云函数,开发者能更高效地进行全栈开发。
|
1月前
|
小程序 数据库
【微信小程序7】云数据库:利用Field获取指定字段的值。
【微信小程序7】云数据库:利用Field获取指定字段的值。
63 2
|
1月前
|
小程序 前端开发 数据库
【微信小程序4】云数据库:如何把数组一次性写入数据库中
【微信小程序4】云数据库:如何把数组一次性写入数据库中
34 1
|
1月前
|
小程序 前端开发 数据库
【微信小程序1】云数据库:模糊查询实现方式
【微信小程序1】云数据库:模糊查询实现方式
61 0
|
1月前
|
小程序 前端开发 数据库
【微信小程序2】云数据库:利用addField在返回记录中增加新字段
【微信小程序2】云数据库:利用addField在返回记录中增加新字段
48 4
|
1月前
|
小程序
微信小程序下载代码
微信小程序下载代码

热门文章

最新文章