各位老师,我想请教一下同样的云函数,为什么运行起来有不同的效果。
我想主要实现的功能是将数据库的集合先清除,再通过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表格的第一张表、第二张表,因为字段都不一样,其实我只想导一次。上面的代码是在网上查找并修改的,遍历了全表。我只想表一一种提取数据方法,表二用另一种数据提取方法。那样就能更简捷