小程式匯出資料到excel表,藉助雲開發後臺實現excel資料的儲存
我們在開發小程式的過程中,可能會有這樣的需求:如何將雲資料庫裡的資料批量匯出到excel表裡?
這個需求可以用強大的雲開發輕鬆實現!
這裡需要用到雲函式,雲端儲存和雲資料庫。可以說通過這一個例子,把小程式雲開發相關的知識都用到了。下面就來介紹如何實現
實現思路
- 1,建立雲函式
- 2,在雲函式裡讀取雲資料庫裡的資料
- 3,安裝node-xlsx類庫(node類庫)
- 4,把雲資料庫裡讀取到的資料存到excel裡
- 5,把excel存到雲端儲存裡並返回對應的雲檔案地址
- 6,通過雲檔案地址下載excel檔案
一、建立excel雲函式
關於如何建立雲開發小程式,這裡我就不再做具體講解。不知道怎麼建立雲開發小程式的同學,可以去翻看騰訊云云開發公眾號內選單【技術交流-視訊教程】中的教學視訊。
建立雲函式時有兩點需要注意的,給大家說下
- 1、一定要把app.js裡的環境id換成你自己的
- 2,你的雲函式目錄要選擇你對應的雲開發環境(通常這裡預設選中的)
不過你這裡的雲開發環境要和你app.js裡的保持一致
二、讀取雲資料庫裡的資料
我們第一步建立好雲函式以後,可以先在雲函式裡讀取我們的雲資料庫裡的資料。
- 1、先看下我們雲資料庫裡的資料
- 2、編寫雲函式,讀取雲資料庫裡的資料(一定要記得部署雲函式)
- 3、成功讀取到資料
把讀取user資料表的完整程式碼給大家貼出來。
// 雲函式入口檔案
const cloud = require('wx-server-sdk')
cloud.init({
env: "test-vsbkm"
})
// 雲函式入口函式
exports.main = async(event, context) => {
return await cloud.database().collection('users').get();
}
三、安裝生成excel檔案的類庫 node-xlsx
通過上面第二步可以看到我們已經成功的拿到需要儲存到excel的源資料,我們接下來要做的就是把資料儲存到excel
- 1、安裝node-xlsx類庫
這一步需要我們事先安裝node,因為我們要用到npm命令,通過命令列
npm install node-xlsx
可以看出我們安裝完成以後,多了一個package-lock.json的檔案
四、編寫把資料儲存到excel的程式碼,
下圖是我們的核心程式碼:
這裡的資料是我們查詢的users表的資料,然後通過下面程式碼遍歷陣列,然後存入excel。這裡需要注意我們的id,name,weixin要和users表裡的對應。
for (let key in userdata) {
let arr = [];
arr.push(userdata[key].id);
arr.push(userdata[key].name);
arr.push(userdata[key].weixin);
alldata.push(arr)
}
還有下面這段程式碼,是把excel儲存到雲端儲存用的
//4,把excel檔案儲存到雲端儲存裡
return await cloud.uploadFile({
cloudPath: dataCVS,
fileContent: buffer, //excel二進位制檔案
})
下面把完整的excel裡的index.js程式碼貼給大家,記得把雲開發環境id換成你自己的。
const cloud = require('wx-server-sdk')
//這裡最好也初始化一下你的雲開發環境
cloud.init({
env: "test-vsbkm"
})
//操作excel用的類庫
const xlsx = require('node-xlsx');
// 雲函式入口函式
exports.main = async(event, context) => {
try {
let {userdata} = event
//1,定義excel表格名
let dataCVS = 'test.xlsx'
//2,定義儲存資料的
let alldata = [];
let row = ['id', '姓名', '微訊號']; //表屬性
alldata.push(row);
for (let key in userdata) {
let arr = [];
arr.push(userdata[key].id);
arr.push(userdata[key].name);
arr.push(userdata[key].weixin);
alldata.push(arr)
}
//3,把資料儲存到excel裡
var buffer = await xlsx.build([{
name: "mySheetName",
data: alldata
}]);
//4,把excel檔案儲存到雲端儲存裡
return await cloud.uploadFile({
cloudPath: dataCVS,
fileContent: buffer, //excel二進位制檔案
})
} catch (e) {
console.error(e)
return e
}
}
五、把excel存到雲端儲存裡並返回對應的雲檔案地址
經過上面的步驟,我們已經成功的把資料存到excel裡,並把excel檔案存到雲端儲存裡。可以看下效果。
接著,就可以通過上圖的下載地址下載excel檔案了。
其實到這裡就差不多實現了基本的把資料儲存到excel裡的功能了,但是為了避免每次匯出資料都需要去雲開發後臺下載excel的麻煩,接下來介紹如何動態獲取下載地址。
六、獲取雲檔案地址下載excel檔案
通過上圖我們可以看出,我們獲取下載連結需要用到一個fileID,而這個fileID在我們儲存excel到雲端儲存時,有返回,如下圖。我們把fileID傳給我們獲取下載連結的方法即可。
- 1、我們獲取到了下載連結,接下來就要把下載連結顯示到頁面
- 2、程式碼顯示到頁面以後,我們就要複製這個連結,方便使用者貼上到瀏覽器或者微信去下載。
下面是完整程式碼:
Page({
onLoad: function(options) {
let that = this;
//讀取users表資料
wx.cloud.callFunction({
name: "getUsers",
success(res) {
console.log("讀取成功", res.result.data)
that.savaExcel(res.result.data)
},
fail(res) {
console.log("讀取失敗", res)
}
})
},
//把資料儲存到excel裡,並把excel儲存到雲端儲存
savaExcel(userdata) {
let that = this
wx.cloud.callFunction({
name: "excel",
data: {
userdata: userdata
},
success(res) {
console.log("儲存成功", res)
that.getFileUrl(res.result.fileID)
},
fail(res) {
console.log("儲存失敗", res)
}
})
},
//獲取雲端儲存檔案下載地址,這個地址有效期一天
getFileUrl(fileID) {
let that = this;
wx.cloud.getTempFileURL({
fileList: [fileID],
success: res => {
// get temp file URL
console.log("檔案下載連結", res.fileList[0].tempFileURL)
that.setData({
fileUrl: res.fileList[0].tempFileURL
})
},
fail: err => {
// handle error
}
})
},
//複製excel檔案下載連結
copyFileUrl() {
let that=this
wx.setClipboardData({
data: that.data.fileUrl,
success(res) {
wx.getClipboardData({
success(res) {
console.log("複製成功",res.data) // data
}
})
}
})
}
})
梳理下上面程式碼的邏輯:
- 1、先通過getUsers雲函式去雲資料庫獲取資料。
- 2、把獲取到的資料通過excel雲函式把資料儲存到excel,然後把excel儲存的雲端儲存。
- 3、獲取雲端儲存裡的檔案下載連結。
- 4、複製下載連結,到瀏覽器裡下載excel檔案。
到這裡我們就完整的實現了把資料儲存到excel的功能了。
文章有點長,知識點有點多,但是大家理解上述內容後,就可以對小程式雲開發的雲函式、雲資料庫、雲端儲存有一個較為完整的瞭解過程。
如果你想要了解更多關於雲開發CloudBase相關的技術故事/技術實戰經驗,請掃碼關注【騰訊云云開發】公眾號~!