前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你小程序导出Excel

手把手教你小程序导出Excel

原创
作者头像
谭广健
发布2022-07-18 16:15:04
4.3K0
发布2022-07-18 16:15:04
举报
文章被收录于专栏:谭广健的专栏

2022年注定世界不太平,在7月份欧元兑美元跌破1:1的汇率;而微信云开发又将在8月8日开始调整计费,改为 “基础套餐+按量付费” 的计费模式,即:最低每月19.9起步。。。好吧,时间的车轮还是向前的谁也没法抵挡。我们还是回到我们的技术本身,通过技术去幻想改变世界吧。今天我们就讲一下怎么腾讯云来导出Excel,这里将涉及到2个功能:1、云函数 2、云储存。如果用19.9那么云函数的调用量为20W/月,云存储 为 2GB;量还是够的。好吧,我们接下来就开始如何构筑这个功能。

一、首先构建云函数,基本都是那几个步骤.

1、引入wx-server-sdk 【npm install --save wx-server-sdk@latest】

2、引入 excel-export 【npm install --save excel-export@latest】

3、就是构建云函数的代码,如下:

代码语言:javascript
复制
// 云函数入口文件
const cloud = require('wx-server-sdk')
const nodeExcel = require('excel-export')
const path = require('path');
cloud.init();
const db = cloud.database();
const MAX_LIMIT = 100;
// 云函数入口函数
exports.main = async (event, context) => {
	const _ = db.command;
	console.log("|" + event.action + "|" + Date.now());
	switch (event.action) {
		case 'ToDEMO': {
			var tableHead = ["预约日期", "预约人姓名", "预约人电话","被访人姓名", "登记日期"];
			var tablewidth = [20, 20, 30, 40, 20];
			var tableMap = {
				styleXmlFile: path.join(__dirname, "styles.xml"),
				name: Date.now() + "-export",
				cols: [],
				rows: [],
			}
			//添加表头
			for (var i = 0; i < tableHead.length; i++) {
				tableMap.cols[tableMap.cols.length] = {
					caption: tableHead[i],
					type: 'string',
					width: tablewidth[i]
				}
			}
			//-----------------------------------------
			const countResult = await db.collection('BookInfo_DB')			
				.count();
			const total = countResult.total
			const batchTimes = Math.ceil(total / 100)
			for (let i = 0; i < batchTimes; i++) {
				let Reg_data = await db.collection('BookInfo_DB')				
					.orderBy('indate', 'desc')
					.skip(i * MAX_LIMIT).limit(MAX_LIMIT)
					.get();
				for (let key = 0; key < Reg_data.data.length; key++) {
					let indate = Reg_data.data[key].v_name,
						Pdate = Reg_data.data[key].act,
						Ptime = Reg_data.data[key].book_time,
						telnet = Reg_data.data[key].indate;
						
					/*let ti = 0;
					aname.forEach(item => {*/
						tableMap.rows[tableMap.rows.length] = [
							Pdate,
							Ptime,
							//item,
							telnet,
							indate
						]
					/*})*/
				}
			}
			//-----------------------------------------
			var excelResult = nodeExcel.execute(tableMap);
			var filePath = "outputExcels";
			var fileName = "BookInfo_DB-" + Date.now() / 1000 + '.xlsx';
			return await cloud.uploadFile({
				cloudPath: path.join(filePath, fileName),
				fileContent: Buffer.from(excelResult, 'binary')				
			});
			//---------------------------------------------------------------------------------		
		};

	default: {
		return "OK";
	}
	}

}

4、就是上传并部署所有文件,之后就安装依懒了。。

二、构建云函数成功后就到用户端进行下载并删除,直接上代码吧。

代码语言:javascript
复制
 downloadExcel(pdate) {
    var that = this;
    wx.showLoading({
      title: '数据准备中。。',
    })
    let fileID = "";
    wx.cloud.callFunction({
      name: 'Excel_TO',
      data: {
        pdate: '' + pdate
      },
      success: res => {
        console.log(res);
        fileID = res.result.fileID;
        wx.cloud.getTempFileURL({
          //获取文件下载地址
          fileList: [res.result.fileID],
          success: res => {
            wx.downloadFile({
              url: res.fileList[0].tempFileURL,
              filePath: wx.env.USER_DATA_PATH + '/' + pdate + '预约名单' + Math.ceil(Math.random() * 99) + '.xlsx', //本地文件路径
              success(res) {
                let data = res.filePath;
                wx.openDocument({ //打开文档
                  filePath: data,
                  showMenu: true
                });
              },
              fail(res) {
                wx.showModal({
                  title: '下载错误',
                  content: '请稍后再试',
                  showCancel: false
                });
              },
              complete(res) {
                console.log(fileID);
                wx.cloud.deleteFile({
                  fileList: [fileID],
                  success: res => {
                    console.log("DEL ok-->" + res.fileList)
                    console.log(res.fileList);
                  },
                  fail: err => {
                    console.log("DEL err-->" + res.fileList)
                  }
                })
              }
            });
          },
          fail(res) {}
        });
      },
      fail(res) {},
    });
    wx.hideLoading();
  }

整个流程讲解一下吧:首先调用刚才的云函数,在云存储里面生成相关的文件,然后将文件在用户端打开,然后再把云文件(减少云储存的空间浪费,毕竟只有2G)。

其实对于微信云开发的这次升价,感觉有点微言;堂堂一个腾讯也不缺这么点钱,你弄个免费让人入坑,然后再进行升价。这也太。。能否按需付费什么的。哎,总之就不爽~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云函数
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档