小程序云函数从云数据下载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

目录
相关文章
|
5月前
|
小程序 数据库
【微信小程序-原生开发】实用教程10 - 动态的新增、修改、删除(含微信云数据库的新增、修改、删除,表单弹窗、确认弹窗、日期选择器、单行输入框、多行输入框、滑动组件的使用)
【微信小程序-原生开发】实用教程10 - 动态的新增、修改、删除(含微信云数据库的新增、修改、删除,表单弹窗、确认弹窗、日期选择器、单行输入框、多行输入框、滑动组件的使用)
184 0
|
2月前
|
缓存 小程序 UED
如何利用小程序的生命周期函数实现数据的加载和更新?
如何利用小程序的生命周期函数实现数据的加载和更新?
80 4
|
2月前
|
小程序 UED 开发者
小程序的生命周期函数
小程序的生命周期函数
91 1
|
2月前
|
缓存 开发框架 移动开发
uni-app:下载使用uni&创建项目&和小程序链接&数据缓存&小程序打包 (一)
uni-app 是一个跨平台的开发框架,它允许开发者使用 Vue.js 来构建应用程序,并能够同时发布到多个平台,如微信小程序、支付宝小程序、H5、App(通过DCloud的打包服务)等。uni-app 的目标是通过统一的代码库,简化多平台开发过程,提高开发效率。 在这一部分中,我们将逐步介绍如何下载和使用uni-app、创建一个新的项目、如何将项目链接到小程序,以及实现数据缓存的基本方法。
|
4月前
|
小程序 开发者
第一个微信小程序的初始化过程、小程序微信开发平台的下载、如何注册一个微信小程序的账号
这篇文章介绍了微信小程序的初始化过程,包括如何注册微信小程序账号、下载微信小程序开发者平台,并指导了新建小程序的详细步骤。
第一个微信小程序的初始化过程、小程序微信开发平台的下载、如何注册一个微信小程序的账号
|
5月前
|
小程序 前端开发
【非常全】微信小程序下载图片到相册,微信小程序自动获取分享图片到相册
【非常全】微信小程序下载图片到相册,微信小程序自动获取分享图片到相册
347 3
|
6月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的星空游戏购买下载平台附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的星空游戏购买下载平台附带文章和源代码部署视频讲解等
36 1
|
5月前
|
小程序
【微信小程序-原生开发】wxml 支持 includes (wxml中执行函数的方法)
【微信小程序-原生开发】wxml 支持 includes (wxml中执行函数的方法)
346 0
|
5月前
|
小程序 数据库
【微信小程序-原生开发】实用教程15 - 列表的排序、搜索(含云数据库常用查询条件的使用方法,t-search 组件的使用)
【微信小程序-原生开发】实用教程15 - 列表的排序、搜索(含云数据库常用查询条件的使用方法,t-search 组件的使用)
127 0
|
5月前
|
小程序 JavaScript
【微信小程序-原生开发】实用教程11 - 用户登录鉴权(含云函数的创建、删除、使用,通过云函数获取用户的openid)
【微信小程序-原生开发】实用教程11 - 用户登录鉴权(含云函数的创建、删除、使用,通过云函数获取用户的openid)
83 0