目录
项目场景
有时候我们需要导出数据库里面的数据,并且将它们导成xlsx的文件,数据库里面的数据是按照录入时间来排列的,类似栈的概念,先提交的数据就会在栈底,而后提交的数据就会在栈顶。我们不能人为的去给它设置一定的排列顺序,那么我们该怎么做呢?一键导出excel的相关步骤之前有说过,链接在下方,现在让我们专注于如何让这个excel表格有规律的排列。小程序一键导出数据库中excel表格出现延迟的解决方案以及文件拼接时间戳的方法_hiddenSharp429的博客-CSDN博客
问题描述
在不能在云开发的数据库中改变记录的前提条件下,导出的数据我想让它按照这样的形式来排列。排列的第一要素是时间,次要素是时间段。我们应该如何来实现这样的功能呢
解决方案:
先在云函数中运用orderBy将数据排列好再将其导出!!
注意 要用number属性来排列。
前提一:让我们每一个记录都有一个专门的rank值
如这里12-09 10:00的记录,它的rank值就是12091000(注意上传到数据库里的时候不要传成string属性了,要number属性。可以在add到数据库里时用类型转换来将string变成number)
前提二:编写云函数
//这个函数是用来获取预约集合里面的数据的,并没有存储到excel里
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env:'你的环境id'
})
// 云函数入口函数
exports.main = async (event, context) => {
return await cloud.database().collection('appointment')
.where({
state:1,
})
.orderBy('rank','asc')
.get()
}
用rank值来排序,排序方式(asc)是升序。
const cloud = require('wx-server-sdk')
cloud.init({
env: "你的环境id"
})
//操作excel用的类库
const xlsx = require('node-xlsx');
// 云函数入口函数
exports.main = async(event, context) => {
try {
let {userdata} = event
//1,定义excel表格名
let dataCVS = '预约.xlsx'
//2,定义存储数据的
let alldata = [];
let row = ['日期','时间段', '组织', '预约老师','预约事项','预约人','手机号']; //表属性
alldata.push(row);
for (let key in userdata) {
let arr = [];
arr.push(userdata[key].day);
arr.push(userdata[key].hour);
arr.push(userdata[key].g1_orderInstitute);
arr.push(userdata[key].g1_orderTeacher);
arr.push(userdata[key].content);
arr.push(userdata[key].subscriber);
arr.push(userdata[key].subscriberPhone);
alldata.push(arr)
}
//3,把数据保存到excel里
var buffer = await xlsx.build([{
name: "mySheetName",
data: alldata
}]);
//4,把excel文件保存到云存储里
return await cloud.uploadFile({
cloudPath: dataCVS,
fileContent: buffer, //excel二进制文件
})
} catch (e) {
console.error(e)
return e
}
}
题外话
主要的思想就是这些,如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!