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