遇到了好几个问题:
- 用云函数将excel文件导入数据库,数据量小的时候没有问题,在数据量大的时候,测试1000条的时候偶尔会出现数据丢失的现象。
- 小程序端在导入时会有一个弹窗提示正在解析,数据量小的时候在导入完成后可以正确地弹出“导入完成”,但数据量大的时候(1000条)就无法弹出,应该怎么解决?
- 怎么才能在导入前先清除集合的所有数据?想先清除所有数据之后再进行导入。
- 怎么才能将导入的excel的第一行作为所有导入数据库的数据的字段名?
- 另外想问一下有没有更好的excel数据导入到云数据库的方式
麻烦了!感谢!
//云函数
const cloud = require('wx-server-sdk')
cloud.init()
var xlsx = require('node-xlsx');
const db = cloud.database()
exports.main = async(event, context) => {
//0,删除现有数据
var aaa =await db.collection('tice').where({
_id: db.command.exists(true)}).remove()
//1,通过fileID下载云存储里的excel文件
let {
fileID
} = event
const res = await cloud.downloadFile({
fileID: fileID,
})
const buffer = res.fileContent
const tasks = []
//2,解析excel文件里的数据
var sheets = xlsx.parse(buffer);
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) {
//3,把解析到的数据存到excelList数据表里
const promise = db.collection('tice')
.add({
data: {
"学籍号":row[0],
"身份证号":row[1],
"姓名":row[2],
}
})
tasks.push(promise)
}
}
});
// 等待所有数据添加完成
let result = await Promise.all(tasks).then(res => {
return res
}).catch(function(err) {
return err
})
return result
}
//小程序端
//onTap1是上传文件
onTap1: function(){
wx.showLoading({
title: '上传中',
})
let that = this;
wx.chooseMessageFile({
count: 1,
type: 'all',
success(res) {
that.uploadFile(res.tempFiles[0]['path'])
}
})
},
uploadFile: function(path){
let ordernum = this.generate();
let that = this;
wx.cloud.uploadFile({
cloudPath: 'tice/'+ordernum+'.xlsx',
filePath: path,
}).then(res => {
that.setData({
file: res.fileID
},()=>{
wx.hideLoading()
})
}).catch(error => {
})
},
readFile: function(fileID) {
wx.showLoading({
title: '解析中',
})
let that = this;
wx.cloud.callFunction({
name: 'scores',
data: {
fileID
},
success: res => {
wx.hideLoading()
wx.showToast({
title: '导入成功',
icon: 'success',
duration: 2000
})
}
})
},
//onTap2是导入数据
onTap2: function(){
let file =this.data.file;
this.readFile(file)
},
楼主解决了吗?也遇到这样的问题了,怎么办。。。