导出测试点的信号名_小程序导出数据到excel表,借助云开发云函数实现excel数据的保存...
我們?cè)谧鲂〕绦蜷_(kāi)發(fā)的過(guò)程中,可能會(huì)有這樣的需求,就是把我們?cè)茢?shù)據(jù)庫(kù)里的數(shù)據(jù)批量導(dǎo)出到excel表里。如果直接在小程序里寫(xiě)是實(shí)現(xiàn)不了的,所以我們要借助小程序的云開(kāi)發(fā)功能了。這里需要用到云函數(shù),云存儲(chǔ)和云數(shù)據(jù)庫(kù)。可以說(shuō)通過(guò)這一個(gè)例子,把我們微信小程序云開(kāi)發(fā)相關(guān)的知識(shí)都用到了。
老規(guī)矩,先看效果圖
上圖就是我們保存用戶數(shù)據(jù)到excel生成的excel文件。
實(shí)現(xiàn)思路
1,創(chuàng)建云函數(shù)
2,在云函數(shù)里讀取云數(shù)據(jù)庫(kù)里的數(shù)據(jù)
3,安裝node-xlsx類(lèi)庫(kù)(node類(lèi)庫(kù))
4,把云數(shù)據(jù)庫(kù)里讀取到的數(shù)據(jù)存到excel里
5,把excel存到云存儲(chǔ)里并返回對(duì)應(yīng)的云文件地址
6,通過(guò)云文件地址下載excel文件
一,創(chuàng)建excel云函數(shù)
關(guān)于云函數(shù)的創(chuàng)建,我這里不多說(shuō)了。如果你連云函數(shù)的創(chuàng)建都不知道,建議你去小程序云開(kāi)發(fā)官方文檔去看看。或者看下我錄制的云開(kāi)發(fā)入門(mén)的視頻:https://edu.csdn.net/course/detail/9604
創(chuàng)建云函數(shù)時(shí)有兩點(diǎn)需要注意的,給大家說(shuō)下
1,一定要把a(bǔ)pp.js里的環(huán)境id換成你自己的
2,你的云函數(shù)目錄要選擇你對(duì)應(yīng)的云開(kāi)發(fā)環(huán)境(通常這里默認(rèn)選中的)
不過(guò)你這里的云開(kāi)發(fā)環(huán)境要和你app.js里的保持一致
二,讀取云數(shù)據(jù)庫(kù)里的數(shù)據(jù)
我們第一步創(chuàng)建好云函數(shù)以后,可以先在云函數(shù)里讀取我們的云數(shù)據(jù)庫(kù)里的數(shù)據(jù)。
1,先看下我們?cè)茢?shù)據(jù)庫(kù)里的數(shù)據(jù)
2,編寫(xiě)云函數(shù),讀取云數(shù)據(jù)庫(kù)里的數(shù)據(jù)(一定要記得部署云函數(shù))
3,成功讀取到數(shù)據(jù)
把讀取user數(shù)據(jù)表的完整代碼給大家貼出來(lái)。
//?云函數(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文件的類(lèi)庫(kù) node-xlsx
通過(guò)上面第二步可以看到我們已經(jīng)成功的拿到需要保存到excel的源數(shù)據(jù),我們接下來(lái)要做的就是把數(shù)據(jù)保存到excel
1,安裝node-xlsx類(lèi)庫(kù)
這一步需要我們事先安裝node,因?yàn)槲覀円玫絥pm命令,通過(guò)命令行
可以看出我們安裝完成以后,多了一個(gè)package-lock.json的文件
四,編寫(xiě)把數(shù)據(jù)保存到excel的代碼,
下圖是我們的核心代碼
這里的數(shù)據(jù)是我們查詢的users表的數(shù)據(jù),然后通過(guò)下面代碼遍歷數(shù)組,然后存入excel。這里需要注意我們的id,name,weixin要和users表里的對(duì)應(yīng)。???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保存到云存儲(chǔ)用的
????//4,把excel文件保存到云存儲(chǔ)里????return?await?cloud.uploadFile({
??????cloudPath:?dataCVS,
??????fileContent:?buffer,?//excel二進(jìn)制文件
????})
下面把完整的excel里的index.js代碼貼給大家,記得把云開(kāi)發(fā)環(huán)境id換成你自己的。
const?cloud?=?require('wx-server-sdk')//這里最好也初始化一下你的云開(kāi)發(fā)環(huán)境
cloud.init({
??env:?"test-vsbkm"
})
//操作excel用的類(lèi)庫(kù)
const?xlsx?=?require('node-xlsx');
//?云函數(shù)入口函數(shù)
exports.main?=?async(event,?context)?=>?{
??try?{
????let?{userdata}?=?event
????//1,定義excel表格名
????let?dataCVS?=?'test.xlsx'
????//2,定義存儲(chǔ)數(shù)據(jù)的
????let?alldata?=?[];
????let?row?=?['id',?'姓名',?'微信號(hào)'];?//表屬性
????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文件保存到云存儲(chǔ)里
????return?await?cloud.uploadFile({
??????cloudPath:?dataCVS,
??????fileContent:?buffer,?//excel二進(jìn)制文件
????})
??}?catch?(e)?{
????console.error(e)
????return?e
??}
}
五,把excel存到云存儲(chǔ)里并返回對(duì)應(yīng)的云文件地址
我們上面已經(jīng)成功的把數(shù)據(jù)存到excel里,并把excel文件存到云存儲(chǔ)里。可以看下效果。
我們這個(gè)時(shí)候,就可以通過(guò)上圖的下載地址下載excel文件了。
我們打開(kāi)下載的excel
其實(shí)到這里就差不多實(shí)現(xiàn)了基本的把數(shù)據(jù)保存到excel里的功能了,但是我們要下載excel,總不能每次都去云開(kāi)發(fā)后臺(tái)吧。所以我們接下來(lái)要?jiǎng)討B(tài)的獲取這個(gè)下載地址。
六,獲取云文件地址下載excel文件
通過(guò)上圖我們可以看出,我們獲取下載鏈接需要用到一個(gè)fileID,而這個(gè)fileID在我們保存excel到云存儲(chǔ)時(shí),有返回,如下圖。我們把fileID傳給我們獲取下載鏈接的方法即可。
1,我們獲取到了下載鏈接,接下來(lái)就要把下載鏈接顯示到頁(yè)面
2,代碼顯示到頁(yè)面以后,我們就要復(fù)制這個(gè)鏈接,方便用戶粘貼到瀏覽器或者微信去下載
下面把我這個(gè)頁(yè)面的完整代碼貼給大家
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保存到云存儲(chǔ)
??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)
??????}
????})
??},
??//獲取云存儲(chǔ)文件下載地址,這個(gè)地址有效期一天
??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
??????}
????})
??},
??//復(fù)制excel文件下載鏈接
??copyFileUrl()?{
????let?that=this
????wx.setClipboardData({
??????data:?that.data.fileUrl,
??????success(res)?{
????????wx.getClipboardData({
??????????success(res)?{
????????????console.log("復(fù)制成功",res.data)?//?data
??????????}
????????})
??????}
????})
??}
})
給大家說(shuō)下上面代碼的步驟。
1,下通過(guò)getUsers云函數(shù)去云數(shù)據(jù)庫(kù)獲取數(shù)據(jù)
2,把獲取到的數(shù)據(jù)通過(guò)excel云函數(shù)把數(shù)據(jù)保存到excel,然后把excel保存的云存儲(chǔ)。
3,獲取云存儲(chǔ)里的文件下載鏈接
4,復(fù)制下載鏈接,到瀏覽器里下載excel文件。
到這里我們就完整的實(shí)現(xiàn)了把數(shù)據(jù)保存到excel的功能了。
文章有點(diǎn)長(zhǎng),知識(shí)點(diǎn)有點(diǎn)多,但是大家把這個(gè)搞會(huì)以后,就可以完整的學(xué)習(xí)小程序云開(kāi)發(fā)的:云函數(shù),云數(shù)據(jù)庫(kù),云存儲(chǔ)了。可以說(shuō)這是一個(gè)綜合的案例。
有什么不懂的地方,或者有疑問(wèn)的地方,請(qǐng)?jiān)谖恼碌撞苛粞?#xff0c;我看到都會(huì)及時(shí)解答的。后面我還會(huì)出一系列關(guān)于云開(kāi)發(fā)的文章,敬請(qǐng)關(guān)注。
總結(jié)
以上是生活随笔為你收集整理的导出测试点的信号名_小程序导出数据到excel表,借助云开发云函数实现excel数据的保存...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 真人版剧集《降世神通:最后的气宗》预告公
- 下一篇: 西部慢调电影海报精选