微信小程序云开发将数据库数据生成excel

有时候管理员需要把数据库中的数据导出来,方便管理员查看核对数据,本小节演示如何在云函数中使用node-xlsx类库把数据生成excel。整个过程分为以下几个过程:(1) 创建云函数,并安装node-xlsx类库;(2) 读取数据库集合中的所有数据;(3) 通过node-xlsx类库把数据写入excel;(4) 把生成的excel文件上传到云存储,供微信小程序端下载浏览。

  1. 通过node-xlsx类库把数据写入数据库

可以使用node-xlsx中的xlsx.build([{name: excelname, data: exceldata}])生成excel文件,其中name参数为需要生成的excel名称,data是一个二维数组,每个元素对应一个单元格。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

//1,定义excel表格名

let excelname = Math.floor(10000* Math.random())+'test.xlsx'

//2,定义存储数据的

let exceldata = [];

let row = ['设备ID', '设备名称', '领用人', '产家', '存放地', '价格', '购买日期', '供货商']; //表属性

exceldata.push(row);

//console.log(dbdata.data)

for (let item of dbdata.data) {

  let arr = [];

  arr.push(item.deviceid);

  arr.push(item.devicename);

  arr.push(item.deviceuser);

  arr.push(item.manufacturer);

  arr.push(item.place);

  arr.push(item.price);

  arr.push(item.purchasedate);

  arr.push(item.supplier);

  exceldata.push(arr)

}

// console.log(exceldata)

//3,把数据保存到excel

var buffer = await xlsx.build([{

  name: excelname,

  data: exceldata

}]);

       代码第2行,采用随机数+test.xls方式生成excel名称,防止多次生成excel在存储中出现命名冲突,这里采用逐行数据写入exceldata,其中第5行写入excel第一样数据的title;代码第8-19行把每条记录转行成excel中的一行数据,代码22-25生成excel。

最后为了提供微信小程序用户下载,需要把生成的excel文件上传至云存储,代码如下:

1

2

3

4

await cloud.uploadFile({

    cloudPath: excelname,

    fileContent: buffer, //excel二进制文件

  })

详细云函数将数据库数据生成excel介绍见微信小程序云开发超详细实战攻略:https://item.jd.com/13038316.html

 

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
微信小程序的云开发数据库提供了导出数据的接口,可以通过云函数将数据导出为 Excel 格式。以下是一个简单的示例代码,可以将指定集合中的数据导出为 Excel 文件并返回给前端: ```javascript // 云函数入口文件 const cloud = require('wx-server-sdk') const xlsx = require('node-xlsx') cloud.init() // 云函数入口函数 exports.main = async (event, context) => { const db = cloud.database() const collection = db.collection(event.collection) // 查询指定集合中的数据 const result = await collection.get() // 将数据转换为 Excel 文件 const data = [ ['_id', 'name', 'age'], ...result.data.map(item => [item._id, item.name, item.age]) ] const buffer = xlsx.build([{ name: 'Sheet1', data }]) // 返回 Excel 文件 return { statusCode: 200, headers: { 'Content-Type': 'application/octet-stream', 'Content-Disposition': `attachment; filename="${event.collection}.xlsx"` }, body: buffer.toString('base64') } } ``` 前端代码调用云函数并下载 Excel 文件: ```javascript wx.cloud.callFunction({ name: 'exportExcel', data: { collection: 'users' }, success: res => { wx.downloadFile({ url: 'data:application/octet-stream;base64,' + res.result.body, success: res => { wx.saveFile({ tempFilePath: res.tempFilePath, success: res => { wx.showToast({ title: '导出成功' }) } }) } }) } }) ``` 需要注意的是,由于 Excel 文件较大,可能会导致云函数返回的数据过大而出现错误。可以通过分页查询或者增加限制条件来避免这个问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值