小程序云开发 云数据库获取集合写入excel进行邮件发送

本文介绍了如何使用小程序云开发从云数据库获取数据,将数据写入Excel文件,并通过邮件发送。文章重点讨论了在过程中遇到的三个问题:数据量超过100条的查询限制、文件名特殊字符导致的下载问题以及云存储链接的解析。提供了问题解决方案和完整代码示例。
摘要由CSDN通过智能技术生成

小程序云开发 云数据库获取集合写入excel进行邮件发送

给别人(友好的兄弟部门)写了一个投票小程序,全程使用云开发平台,也就是说不需要自己再挂服务器了,投票数据需要最后进行统计,之前是使用csv进行导出,发送邮件到指定邮箱,由相关人员对csv文件进行处理(倒入excel,另存为)进行数据统计,但是实际操作发现太麻烦了,于是乎想到用云开发的云储存进行excel表的写入,让统计数据的同学下载这个文件就行了,说干就干

这个坑是我自己一步一个脚印踩出来的,记下来便于以后使用

  1. 云数据库一次服务器端查询最多支持一百条数据,如果数据超过100条(如本项目)得进行多次查询

  2. 云储存的文件名不能有特殊字符,否则无法下载,如时间日期2019-11-12 12:30.xls有短横杠有空格,腾讯会拒绝访问

  3. 云储存得到的链接是cloud://xxx,需要在服务端或小程序端解析成真正地址才能在外部下载。

坑的解析

坑1

超过100条数据的查询,看似很复杂,要先读有多少数据,判断需要读多少次,然后读取这个次数,加入一个数组,最后全部输出。

但其实官方给了个demo,改就行了,反正我不会写hhh,我会用就行。

官方文档

因为有默认 limit 100 条的限制,因此很可能一个请求无法取出所有数据,需要分批次取:

这里我就给自己改的了,如果数据很少,可以用下面注释的方法

  //取集合所有数据,突破一次100条的限制
  const countResult = await db.collection('eventVote').count()
  const total = countResult.total
  // 计算需分几次取
  const batchTimes = Math.ceil(total / 100)
  // 承载所有读操作的 promise 的数组
  const tasks = []
  for (let i = 0; i < batchTimes; i++) {
   
    const promise = db.collection('eventVote').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
    tasks.push(promise)
  }
  // 等待所有
  var myData = (await Promise.all(tasks)).reduce((acc, cur) => {
   
    return {
   
      data: acc.data.concat(cur.data),
      errMsg: acc.errMsg,
    }
  })

  // 一次只能取100条数据,对于更多的数据集合需要用上面的方法
  // try {
   
  //   var myData = await db
  //     .collection('eventVote')
  //     .orderBy('datetime', 'desc')
  //     .orderBy('event_id', 'desc')
  //     .orderBy('school', 'desc')
  //     .orderBy('title', 'desc')
  //     .get()
  //   //console.log(JSON.stringify(myData))
  // } catch (err) {
   
  //   console.error(err)
  // }

坑2

坑2 比较简单解决,我这里文件命名是按照时间的顺序来命名的

把2019-11-24 10:30:30 这种去掉输出符号和空格就行,最后变成

let d = new Date().Format("yyyyMMddhhmmss")
//1,定义excel表格名
let dataCVS = 'excel/result' + d + '.xlsx'

这样的话输出的文件就是没有空格和特殊符号的了,可以正常下载了

坑3

传入文件的cloud链接即可获得真实下载的地址,贴入发送的邮件即可。

//获取真实的下载地址
  
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值