const cloud = require('wx-server-sdk')
cloud.init({
env: "cloud1-1g7rev901677259f" //编写云开发环境
})
const xlsx = require('node-xlsx') //导入Excel类库
const db = cloud.database() //声明数据库对象
const _ = db.command
exports.main = async (event, context) => { //主函数入口
try {
//将获取到的数据对象赋值给变量,接下来需要用该对象向Excel表中添加数据
let StuInfo = await db.collection('stuList').get()
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].stuNum);
arr.push(StuInfo.data[key].stuName);
arr.push(StuInfo.data[key].stuClass);
arr.push(StuInfo.data[key].stuShou);
arr.push(StuInfo.data[key].stunumId);
arr.push(StuInfo.data[key].fiveClass);
for (let i = 0; i < StuInfo.data[key].lessontable.length; i++) {
var lessonArr =[];
lessonArr.push(StuInfo.data[key].lessontable[i].lesson+"-"+StuInfo.data[key].lessontable[i].week+"-"+StuInfo.data[key].lessontable[i].knob);
arr.push(lessonArr)
}
alldata.push(arr)
}
var buffer = await xlsx.build([{
name: "定制班学员信息",
data: alldata
}]);
//将表格存入到存储库中并返回文件ID
return await cloud.uploadFile({
cloudPath: dataCVS,
fileContent: buffer, //excel二进制文件
})
} catch (error) {
console.error(error)
}
}
数据1500条呢?如果2万条呢?
这就涉及到
1、读取数据一次性读取多少条,云函数1-1000可以选择 :limit(1000)
2、从哪里开始读,skip(n),
3、每次读出来的数据合并:concat()
4、如果不要数据按照orderBy()顺序读出,那么就不用await ,直接用for循环,全部读出来后数据合并。
const xlsx = require('node-xlsx')
const db = cloud.database()
const _ = db.command
let StuInfo1 = await db.collection(event.table)
.where({user_hd:event.search3},)
.count()
let large = 1000
let list = []
let StuInfo2 = []
let count1 = StuInfo1.total
for (let i = 0; i < count1; i += large) {
let StuInfo = await db.collection(event.table)
.where({user_hd:event.search3},)
.orderBy('projcet', 'asc')
.limit(large)
.skip(i)
.get()
list = list.concat(StuInfo.data);
if (list.length == count1) {
StuInfo2=list
}
}
console.log(StuInfo2)
排序分页导呗,每次导出记录一下上一次最后一条的ID呗