码字不易,有帮助的同学希望能关注一下我的微信公众号:Code程序人生,感谢!代码自用自取。
这个需求也是我在接私活的时候遇到的,需求就是,要实现将指定数据库表
的数据全部导出
生成excel和按需导出
,也就是导出全部数据,或者导出指定哪天的数据。
其实我一开始是没有思路的,但是我查了一些资料,发现强大的node是有处理excel表格的模块的。
生产环境的话,因为我为了方便还是选用的云开发,但是云开发其实在语法和内容上和node是没有区别的,无论是写法还是模块,都是相同或者类似的。虽然我没有看过云函数的底层实现源码,但是通过使用也能发现,它其实就是基于node做的封装,为我们提供了很多便利的API。
话不多说,我们直入主题。
const cloud = require('wx-server-sdk')
cloud.init({
env:'你的云环境ID'
})
const xlsx = require('node-xlsx') //导入Excel类库
const db = cloud.database() //声明数据库对象
const _ = db.command
exports.main = async (event, context) => { //主函数入口
try {
let schoolBusInfo = event.data;
console.log(schoolBusInfo);
let dataCVS = `schoolBusInfo-${Math.floor(Math.random()*1000000000)}.xlsx`
//声明一个Excel表,表的名字用随机数产生
let alldata = [];
let row = ['车牌号', '日期','部门','姓名','联系方式']; //表格的属性,也就是表头说明对象
alldata.push(row); //将此行数据添加到一个向表格中存数据的数组中
//接下来是通过循环将数据存到向表格中存数据的数组中
for (let key = 0; key<schoolBusInfo.length; key++) {
let arr = [];
arr.push(schoolBusInfo[key].carNum);
arr.push(schoolBusInfo[key].Date);
arr.push(schoolBusInfo[key].class);
arr.push(schoolBusInfo[key].name);
arr.push(schoolBusInfo[key].phone);
alldata.push(arr)
}
var buffer = await xlsx.build([{
name: "mySheetName",
data: alldata
}]);
//将表格存入到存储库中并返回文件ID
return await cloud.uploadFile({
cloudPath: dataCVS,
fileContent: buffer, //excel二进制文件
})
} catch (error) {
console.error(error)
}
}
如果你是使用的node,可以仿照着这个形式,copy一下,不存在任何坑,以后有机会,我也发一下node版本的。
从上往下讲解一下代码:
- 其实最重要的就是引入了一个
node-xlsx
的模块,这个模块是用来处理excel文件的。 - 这个
let schoolBusInfo = event.data
就是客户端发送过来的,需要导出的数据。 -
dataCVS
是生成excel文件的名字。 -
row
是数组里存放的是excel文件的表头,就是每一列的第一行的数据。 - 然后就是对客户端传过来的数据进行一个循环遍历。
-
schollBusInfo[key].xxxx
就是发送过来的数据的字段,和前面那个row
表头代表的意义要一致。
var buffer = await xlsx.build([{
name: "mySheetName",
data: alldata
}]);
- ↑↑↑这就是最后一步,进行表的构建,通过我们前面准备的数据,调用
xlsx
的build方法。
因为我使用的是云开发,我可以将生成的数据源存放到云存储里,然后返回给客户端一个云存储的存放地址。
这基本就是全部的一个思路,因为node为我们提供了node-xlsx
这个模块,所有总体的代码编写没有太大问题。
其它语言肯定也存在这种类似的库和包,大家可以查一下资料。
有微信小程序课设、毕设需求联系个人QQ:505417246
关注下面微信公众号,可以领取微信小程序、Vue、TypeScript、前端、uni-app、全栈、Nodejs、Python等实战学习资料
最新最全的前端知识总结和项目源码都会第一时间发布到微信公众号,请大家多多关注,谢谢
关注公众号后,回复前端面试题,领取大量前端面试题汇总pdf资料