手把手教你小程序导出Excel

December 17, 2023
测试
测试
测试
测试
8 分钟阅读

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、就是构建云函数的代码,如下:

// 云函数入口文件
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、就是上传并部署所有文件,之后就安装依懒了。。

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

 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)。

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

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多