小程序導出數據到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)是一款雲端一體化的產品方案 ,采用 serverless 架構,免環境搭建等運維事務 ,支持一雲多端,助力快速構建小程序、Web應用、移動應用。
技術文檔:https://www.cloudbase.net/
如果你想要了解更多關於雲開發CloudBase相關的技術故事/技術實戰經驗,請掃碼關注【騰訊雲雲開發】公眾號~

