const cloud = require('wx-server-sdk') cloud.init({ env: 'yz-7g23c92hf3223f1d' }) // 使用当前云环境 const xlsx = require('node-xlsx') //导入Excel类库 const db = cloud.database() //声明数据库对象 const _ = db.command // 云函数入口函数 exports.main = async (event, context) => { // 查询所有学生信息 let all_information = await db.collection('namelist').where({ filename: _.eq(event.filename) }).orderBy('student_ID', 'asc').limit(500).get(); // 查询非出勤的学生信息 let call_information = await db.collection('namelist').where({ filename: _.eq(event.filename), state: _.neq("present") }).orderBy('state', 'asc').orderBy('student_ID', 'asc').limit(500).get(); // 准备 Excel 文件数据 var allData1 = []; // 第一张表格(所有学生) var allData2 = []; // 第二张表格(筛选状态不为present的学生) // 第一张表格的表头:学号、姓名、被点名次数、积分、状态 var arr = ["学号", "姓名", "被点名次数", "积分", "状态"]; allData1.push(arr); // 遍历所有学生信息,填充到第一张表格 for (let i = 0; i < all_information.data.length; ++i) { arr = []; arr.push(all_information.data[i].student_ID); arr.push(all_information.data[i].name); arr.push(all_information.data[i].attendance_count || 0); // 被点名次数,默认为0 arr.push(all_information.data[i].score || 0); // 积分,默认为0 arr.push(all_information.data[i].state); // 状态 allData1.push(arr); } // 第二张表格的课程信息和表头 arr = ["课程名称", event.course]; allData2.push(arr); arr = ["任课老师", event.teacher]; allData2.push(arr); arr = ["日期", event.date]; allData2.push(arr); arr = [event.weekday + ":" + event.start + "-" + event.end]; allData2.push(arr); arr = ["学号", "姓名", "状态"]; allData2.push(arr); // 遍历非出勤学生信息,填充到第二张表格 for (let i = 0; i < call_information.data.length; ++i) { arr = []; arr.push(call_information.data[i].student_ID); arr.push(call_information.data[i].name); if (call_information.data[i].state == "cut") arr.push("旷课"); else arr.push("请假"); allData2.push(arr); } // 生成 Excel 文件的两个工作表 var buffer = await xlsx.build([ { name: "所有学生信息", // 第一张表名称 data: allData1 }, { name: "本次学生到课情况", // 第二张表名称 data: allData2 } ]); console.log("生成的Excel数据:", buffer); // 删除旧文件 const result = await cloud.deleteFile({ fileList: [event.fileID], }); console.log("文件删除结果:", result.fileList); // 上传新生成的Excel文件 return await cloud.uploadFile({ cloudPath: event.filename + ".xlsx", // 上传的文件名 fileContent: buffer // 上传的文件内容 }); }