小程序讀取excel表格數(shù)據(jù),并存儲(chǔ)到云數(shù)據(jù)庫(kù)

最近一直比較忙,答應(yīng)大家的小程序解析excel一直沒(méi)有寫(xiě)出來(lái),今天終于忙里偷閑,有機(jī)會(huì)把這篇文章寫(xiě)出來(lái)給大家了。
老規(guī)矩先看效果圖

效果其實(shí)很簡(jiǎn)單,就是把excel里的數(shù)據(jù)解析出來(lái),然后存到云數(shù)據(jù)庫(kù)里。說(shuō)起來(lái)很簡(jiǎn)單。但是真的做起來(lái)的時(shí)候,發(fā)現(xiàn)其中要用到的東西還是很多的。不信。。。。 那來(lái)看下流程圖
流程圖

通過(guò)流程圖,我看看到我們這里使用了云函數(shù),云存儲(chǔ),云數(shù)據(jù)庫(kù)。
流程圖主要實(shí)現(xiàn)下面幾個(gè)步驟
1,使用wx.chooseMessageFile選擇要解析的excel表格
2,通過(guò)wx.cloud.uploadFile上傳excel文件到云存儲(chǔ)
3,云存儲(chǔ)返回一個(gè)fileid 給我們
4,定義一個(gè)excel云函數(shù)
5,把第3步返回的fileid傳遞給excel云函數(shù)
6,在excel云函數(shù)里解析excel,并把數(shù)據(jù)添加到云數(shù)據(jù)庫(kù)。
可以看到最神秘,最重要的就是我們的excel云函數(shù)。
所以我們先把前5步實(shí)現(xiàn)了,后面重點(diǎn)講解下我們的excel云函數(shù)。
一,選擇并上傳excel表格文件到云存儲(chǔ)
這里我們使用到了云開(kāi)發(fā),使用云開(kāi)發(fā)必須要先注冊(cè)一個(gè)小程序,并給自己的小程序開(kāi)通云開(kāi)發(fā)功能。這個(gè)知識(shí)點(diǎn)我講過(guò)很多遍了,還不知道怎么開(kāi)通并使用云開(kāi)發(fā)的同學(xué),去翻下我前面的文章,或者看下我錄的講解視頻《5小時(shí)入門(mén)小程序云開(kāi)發(fā)》
1,先定義我們的頁(yè)面
頁(yè)面很簡(jiǎn)單,就是一個(gè)按鈕如下圖,點(diǎn)擊按鈕時(shí)調(diào)用chooseExcel方法,選擇excel

對(duì)應(yīng)的wxml代碼如下

2,編寫(xiě)文件選擇和文件上傳方法

上圖的chooseExcel就是我們的excel文件選擇方法。
uploadExcel就是我們的文件上傳方法,上傳成功以后會(huì)返回一個(gè)fildID。我們把fildID傳遞給我們的jiexi方法,jiexi方法如下
3 把fildID傳遞給云函數(shù)

二,解下來(lái)就是定義我們的云函數(shù)了。
1,首先我們要新建云函數(shù)

如果你還不知道如何新建云函數(shù),可以翻看下我之前寫(xiě)的文章,也可以看我錄的視頻《5小時(shí)入門(mén)小程序云開(kāi)發(fā)》
如下圖所示的excel就是我們創(chuàng)建的云函數(shù)

2,安裝node-xlsx依賴庫(kù)

如上圖所示,右鍵excel,然后點(diǎn)擊在終端中打開(kāi)。 打開(kāi)終端后,
輸入 npm install node-xlsx 安裝依賴??梢钥吹较聢D安裝中的進(jìn)度條

這一步需要你電腦上安裝過(guò)node.js并配置npm命令。
3,安裝node-xlsx依賴庫(kù)完成

三,編寫(xiě)云函數(shù)
我把完整的代碼貼出來(lái)給大家
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
?//1,通過(guò)fileID下載云存儲(chǔ)里的excel文件
?const res = await cloud.downloadFile({
? ?fileID: fileID,
?})
?const buffer = res.fileContent
?const tasks = [] //用來(lái)存儲(chǔ)所有的添加數(shù)據(jù)操作
?//2,解析excel文件里的數(shù)據(jù)
?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]; //第幾行數(shù)據(jù)
? ? ?if (rowId > 0 && row) { //第一行是表格標(biāo)題,所有我們要從第2行開(kāi)始讀
? ? ? ?//3,把解析到的數(shù)據(jù)存到excelList數(shù)據(jù)表里
? ? ? ?const promise = db.collection('users')
? ? ? ? ?.add({
? ? ? ? ? ?data: {
? ? ? ? ? ? ?name: row[0], //姓名
? ? ? ? ? ? ?age: row[1], //年齡
? ? ? ? ? ? ?address: row[2], //地址
? ? ? ? ? ? ?wechat: row[3] //wechat
? ? ? ? ? ?}
? ? ? ? ?})
? ? ? ?tasks.push(promise)
? ? ?}
? ?}
?});
?// 等待所有數(shù)據(jù)添加完成
?let result = await Promise.all(tasks).then(res => {
? ?return res
?}).catch(function(err) {
? ?return err
?})
?return result
}
上面代碼里注釋的很清楚了,我這里就不在啰嗦了。
有幾點(diǎn)注意的給大家說(shuō)下
1,要先創(chuàng)建數(shù)據(jù)表

image.png
2,有時(shí)候如果老是解析失敗,可能是有的電腦需要在云函數(shù)里也要初始化云開(kāi)發(fā)環(huán)境

四,解析并上傳成功
如我的表格里有下面三條數(shù)據(jù)

點(diǎn)擊上傳按鈕,并選擇我們的表格文件

上傳成功的返回如下,可以看出我們添加了3條數(shù)據(jù)到數(shù)據(jù)庫(kù)

添加成功效果圖如下

到這里我們就完整的實(shí)現(xiàn)了小程序上傳excel數(shù)據(jù)到數(shù)據(jù)庫(kù)的功能了。
再來(lái)帶大家看下流程圖

如果你有遇到問(wèn)題,可以在底部留言,我看到后會(huì)及時(shí)解答。后面我會(huì)寫(xiě)更多小程序云開(kāi)發(fā)實(shí)戰(zhàn)的文章出來(lái)。也會(huì)錄制本節(jié)的視頻出來(lái),敬請(qǐng)關(guān)注。