收藏
回答

云函数清空数据再读取excel进数据库没反应?

各位老师,我想请教一下同样的云函数,为什么运行起来有不同的效果。

我想主要实现的功能是将数据库的集合先清除,再通过EXCEL数据导入新的数据。之前试过很多次数据清空但是新数据无法导入,自己都要放弃了,但是不知道怎么回事突然好使了。然后我还需要另外一个导入EXCEL,照着又另起一个云函数,同样的代码还是能清空不能导入。我在检查时误操作重新上传了最开始的那个云函数,结果全都不好使了。麻烦帮我看一下我哪里有问题,谢谢!

const cloud = require('wx-server-sdk')
cloud.init()
var xlsx = require('node-xlsx');
const db = cloud.database()


exports.main = async(event, context) => {
  let {
    fileID
  } = event


  try {
    return await db.collection('detail').where({
      Date: db.command.exists(true)   //"checked"数据字段,"false" 值   
    }).remove()
  } catch (e) {
    console.error(e)
  }
  //1,通过fileID下载云存储里的excel文件
  const res = await cloud.downloadFile({
    fileID: fileID,
  })
  const buffer = res.fileContent
  const tasks = [] //用来存储所有的添加数据操作
  //2,解析excel文件里的数据
 var sheets = xlsx.parse(buffer); //获取到所有sheets
 sheets.forEach(function(sheet{
   console.log(sheet['name']);
   for (var rowId in sheet['data']) {
     console.log(rowId);
     var row = sheet['data'][rowId]; //第几行数据
     if (rowId > 0 && row) { //第一行是表格标题,所有我们要从第2行开始读
       //3,把解析到的数据存到excelList数据表里
        const promise = db.collection('detail')
          .add({
            data: {
              Date: row[0], //日期
              User: row[1], //用户
              Ex: row[2], //摘要
              CB: row[3], //科目
              Debit: row[4], //借方
              Credit:row[5//贷方
            }
          })
        tasks.push(promise)
      }
    }
  });
  // 等待所有数据添加完成
  let result = await Promise.all(tasks).then(res => {
    return res
  }).catch(function(err{
    return err
  })
  return result
}

除了以上问题我还想问,怎么才能针对性的只导入一个EXCEL表格的第一张表、第二张表,因为字段都不一样,其实我只想导一次。上面的代码是在网上查找并修改的,遍历了全表。我只想表一一种提取数据方法,表二用另一种数据提取方法。那样就能更简捷

回答关注问题邀请回答
收藏
登录 后发表内容
问题标签