咱們在作小程序開發的過程當中,可能會有這樣的需求,就是把咱們雲數據庫裏的數據批量導出到excel表裏。若是直接在小程序裏寫是實現不了的,因此咱們要藉助小程序的雲開發功能了。這裏須要用到雲函數,雲存儲和雲數據庫。能夠說經過這一個例子,把咱們微信小程序雲開發相關的知識都用到了。node
關於雲函數的建立,我這裏很少說了。若是你連雲函數的建立都不知道,建議你去小程序雲開發官方文檔去看看。或者看下我錄製的雲開發入門的視頻:edu.csdn.net/course/deta…數據庫
咱們第一步建立好雲函數之後,能夠先在雲函數裏讀取咱們的雲數據庫裏的數據。npm
把讀取user數據表的完整代碼給你們貼出來。json
// 雲函數入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: "test-vsbkm"
})
// 雲函數入口函數
exports.main = async(event, context) => {
return await cloud.database().collection('users').get();
}
複製代碼
經過上面第二步能夠看到咱們已經成功的拿到須要保存到excel的源數據,咱們接下來要作的就是把數據保存到excel小程序
npm install node-xlsx
複製代碼
能夠看出咱們安裝完成之後,多了一個package-lock.json的文件 微信小程序
下圖是咱們的核心代碼 數組
這裏的數據是咱們查詢的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換成你本身的。bash
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,總不能每次都去雲開發後臺吧。因此咱們接下來要動態的獲取這個下載地址。下面把我這個頁面的完整代碼貼給你們
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
}
})
}
})
}
})
複製代碼
給你們說下上面代碼的步驟。
到這裏咱們就完整的實現了把數據保存到excel的功能了。