借助云开发轻松实现后台数据批量导出丨实战
小程序?qū)С鰯?shù)據(jù)到excel表,借助云開發(fā)后臺實(shí)現(xiàn)excel數(shù)據(jù)的保存
我們在開發(fā)小程序的過程中,可能會有這樣的需求:如何將云數(shù)據(jù)庫里的數(shù)據(jù)批量導(dǎo)出到excel表里?
這個需求可以用強(qiáng)大的云開發(fā)輕松實(shí)現(xiàn)!
這里需要用到云函數(shù),云存儲和云數(shù)據(jù)庫。可以說通過這一個例子,把小程序云開發(fā)相關(guān)的知識都用到了。下面就來介紹如何實(shí)現(xiàn)
實(shí)現(xiàn)思路
- 1,創(chuàng)建云函數(shù)
- 2,在云函數(shù)里讀取云數(shù)據(jù)庫里的數(shù)據(jù)
- 3,安裝node-xlsx類庫(node類庫)
- 4,把云數(shù)據(jù)庫里讀取到的數(shù)據(jù)存到excel里
- 5,把excel存到云存儲里并返回對應(yīng)的云文件地址
- 6,通過云文件地址下載excel文件
一、創(chuàng)建excel云函數(shù)
關(guān)于如何創(chuàng)建云開發(fā)小程序,這里我就不再做具體講解。不知道怎么創(chuàng)建云開發(fā)小程序的同學(xué),可以去翻看騰訊云云開發(fā)公眾號內(nèi)菜單【技術(shù)交流-視頻教程】中的教學(xué)視頻。
創(chuàng)建云函數(shù)時有兩點(diǎn)需要注意的,給大家說下
- 1、一定要把a(bǔ)pp.js里的環(huán)境id換成你自己的
- 2,你的云函數(shù)目錄要選擇你對應(yīng)的云開發(fā)環(huán)境(通常這里默認(rèn)選中的)
不過你這里的云開發(fā)環(huán)境要和你app.js里的保持一致
二、讀取云數(shù)據(jù)庫里的數(shù)據(jù)
我們第一步創(chuàng)建好云函數(shù)以后,可以先在云函數(shù)里讀取我們的云數(shù)據(jù)庫里的數(shù)據(jù)。
- 1、先看下我們云數(shù)據(jù)庫里的數(shù)據(jù)
- 2、編寫云函數(shù),讀取云數(shù)據(jù)庫里的數(shù)據(jù)(一定要記得部署云函數(shù))
- 3、成功讀取到數(shù)據(jù)
把讀取user數(shù)據(jù)表的完整代碼給大家貼出來。
// 云函數(shù)入口文件 const cloud = require('wx-server-sdk') cloud.init({env: "test-vsbkm" }) // 云函數(shù)入口函數(shù) exports.main = async(event, context) => {return await cloud.database().collection('users').get(); }三、安裝生成excel文件的類庫 node-xlsx
通過上面第二步可以看到我們已經(jīng)成功的拿到需要保存到excel的源數(shù)據(jù),我們接下來要做的就是把數(shù)據(jù)保存到excel
- 1、安裝node-xlsx類庫
這一步需要我們事先安裝node,因?yàn)槲覀円玫絥pm命令,通過命令行
可以看出我們安裝完成以后,多了一個package-lock.json的文件
四、編寫把數(shù)據(jù)保存到excel的代碼,
下圖是我們的核心代碼:
這里的數(shù)據(jù)是我們查詢的users表的數(shù)據(jù),然后通過下面代碼遍歷數(shù)組,然后存入excel。這里需要注意我們的id,name,weixin要和users表里的對應(yīng)。
還有下面這段代碼,是把excel保存到云存儲用的
//4,把excel文件保存到云存儲里return await cloud.uploadFile({cloudPath: dataCVS,fileContent: buffer, //excel二進(jìn)制文件})下面把完整的excel里的index.js代碼貼給大家,記得把云開發(fā)環(huán)境id換成你自己的。
const cloud = require('wx-server-sdk') //這里最好也初始化一下你的云開發(fā)環(huán)境 cloud.init({env: "test-vsbkm" }) //操作excel用的類庫 const xlsx = require('node-xlsx');// 云函數(shù)入口函數(shù) exports.main = async(event, context) => {try {let {userdata} = event//1,定義excel表格名let dataCVS = 'test.xlsx'//2,定義存儲數(shù)據(jù)的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,把數(shù)據(jù)保存到excel里var buffer = await xlsx.build([{name: "mySheetName",data: alldata}]);//4,把excel文件保存到云存儲里return await cloud.uploadFile({cloudPath: dataCVS,fileContent: buffer, //excel二進(jìn)制文件})} catch (e) {console.error(e)return e} }五、把excel存到云存儲里并返回對應(yīng)的云文件地址
經(jīng)過上面的步驟,我們已經(jīng)成功的把數(shù)據(jù)存到excel里,并把excel文件存到云存儲里。可以看下效果。
接著,就可以通過上圖的下載地址下載excel文件了。
其實(shí)到這里就差不多實(shí)現(xiàn)了基本的把數(shù)據(jù)保存到excel里的功能了,但是為了避免每次導(dǎo)出數(shù)據(jù)都需要去云開發(fā)后臺下載excel的麻煩,接下來介紹如何動態(tài)獲取下載地址。
六、獲取云文件地址下載excel文件
通過上圖我們可以看出,我們獲取下載鏈接需要用到一個fileID,而這個fileID在我們保存excel到云存儲時,有返回,如下圖。我們把fileID傳給我們獲取下載鏈接的方法即可。
- 1、我們獲取到了下載鏈接,接下來就要把下載鏈接顯示到頁面
- 2、代碼顯示到頁面以后,我們就要復(fù)制這個鏈接,方便用戶粘貼到瀏覽器或者微信去下載。
下面是完整代碼:
Page({onLoad: function(options) {let that = this;//讀取users表數(shù)據(jù)wx.cloud.callFunction({name: "getUsers",success(res) {console.log("讀取成功", res.result.data)that.savaExcel(res.result.data)},fail(res) {console.log("讀取失敗", res)}})},//把數(shù)據(jù)保存到excel里,并把excel保存到云存儲savaExcel(userdata) {let that = thiswx.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 URLconsole.log("文件下載鏈接", res.fileList[0].tempFileURL)that.setData({fileUrl: res.fileList[0].tempFileURL})},fail: err => {// handle error}})},//復(fù)制excel文件下載鏈接copyFileUrl() {let that=thiswx.setClipboardData({data: that.data.fileUrl,success(res) {wx.getClipboardData({success(res) {console.log("復(fù)制成功",res.data) // data}})}})} })梳理下上面代碼的邏輯:
- 1、先通過getUsers云函數(shù)去云數(shù)據(jù)庫獲取數(shù)據(jù)。
- 2、把獲取到的數(shù)據(jù)通過excel云函數(shù)把數(shù)據(jù)保存到excel,然后把excel保存的云存儲。
- 3、獲取云存儲里的文件下載鏈接。
- 4、復(fù)制下載鏈接,到瀏覽器里下載excel文件。
到這里我們就完整的實(shí)現(xiàn)了把數(shù)據(jù)保存到excel的功能了。
文章有點(diǎn)長,知識點(diǎn)有點(diǎn)多,但是大家理解上述內(nèi)容后,就可以對小程序云開發(fā)的云函數(shù)、云數(shù)據(jù)庫、云存儲有一個較為完整的了解過程。
如果你想要了解更多關(guān)于云開發(fā)CloudBase相關(guān)的技術(shù)故事/技術(shù)實(shí)戰(zhàn)經(jīng)驗(yàn),請掃碼關(guān)注【騰訊云云開發(fā)】公眾號~
轉(zhuǎn)載于:https://www.cnblogs.com/CloudBase/p/11495819.html
總結(jié)
以上是生活随笔為你收集整理的借助云开发轻松实现后台数据批量导出丨实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#中List列表与Datagridvi
- 下一篇: halcon自标定