1. 程式人生 > >藉助雲開發輕鬆實現後臺資料批量匯出丨實戰

藉助雲開發輕鬆實現後臺資料批量匯出丨實戰

小程式匯出資料到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相關的技術故事/技術實戰經驗,請掃碼關注【騰訊云云開發】公眾號~

相關推薦

藉助開發輕鬆實現後臺資料批量匯出實戰

小程式匯出資料到excel表,藉助雲開發後臺實現excel資料的儲存 我們在開發小程式的過程中,可能會有這樣的需求:如何將雲資料庫裡的資料批量匯出到excel表裡? 這個需求可以用強大的雲開發輕鬆實現! 這裡需要用到雲函式,雲端儲存和雲資料庫。可以說通過這一個例子,把小程式雲開發相關的知識都用到了。下面就來

藉助開發資料庫實現小程式列表上拉重新整理功能開發101

上一期101專欄中,我們介紹瞭如何藉助雲開發資料庫實現小程式的列表觸底自動載入功能,相對應的,小程式列表上拉重新整理又該如何實現呢?本期專欄就來為大家解答。 原理說明 在小程式中,如果我們希望實現上拉重新整理的功能,則需要我們監聽小程式頁面的 onPullDownRefresh 事件,我們可以在這個方法中實現

基於小程式·開發構建高考查分小程式實戰

2019高考報名人數達到了 1031 萬的新高,作為一名三年前參考高考的準程式猿,趕在高考前,加班加點從零開始做了一款高考查分小程式,算是一名老學長送給學弟學妹們的高考禮。上線僅 1 個月,使用者數就突破了 1k,關於小程式的介紹就不多說了,可以去搜【歷年高考分數線查詢】體驗,今天主要談談技術原理和實現細節。

python開發電影查詢系統(一)—python實現後臺資料

爬蟲也學了很長一段時間了,雖然有些東西還不是很熟悉,但使用python和Django自己做了一個專案,即爬取http://www.bd-film.com/的電影資訊,並將資料儲存到本地,再通過Django做一個查詢入口進行查詢。 我將程式碼實現大致分為三部

實戰開發實現後臺國際化過程中所遇到的問題

目前。越來越多專案中都使用到了國際化的技術,不僅僅是頁面的國際化顯示,就是後臺的資訊都已經涉及到了國際化的問題。今天就分享下前幾天在實現後臺國際化過程中走到坑。 首先百度了一下,實現後臺國際化需要用到jdk中的ResourceBundle類庫,然後照著網上

小程式開發中資料庫的資料分段和顯示圖片

這是一個比較久遠的問題,查看了官方解釋也沒有弄好,網上搜的試了也不對,這裡給出一種方法,比較笨,但是可以實現。 玩過小程式雲開發的都知道雲開發控制檯的資料庫是這樣的 這裡面的資料一般都不會太多,資料內容也不會太長,畢竟免費的資料庫沒有那麼大的容量,但是免費的東西作為一名技術咱也得用到極

微信小程式~開發實現的一個社群 Demo(即將完結~)

微信雲開發 官方介紹 開發者可以使用雲開發開發微信小程式、小遊戲,無需搭建伺服器,即可使用雲端能力。雲開發為開發者提供完整的雲端支援,弱化後端和運維概念,無需搭建伺服器,使用平臺提供的 API 進行核

使用PHPExcel實現資料批量匯出為excel表格的方法(必看)

/** * 批量匯出資料 * @param $arr 從資料庫查詢出來,即要匯出的資料 * $name excel表歌名 */ function expExcel($arr,$name){ //require

Java實現oracle資料批量操作

java事務處理 TestDemo:結合位於java.sql下面的介面 PreparedStatement和oracle事務實現批量刪除 常用方法: int [] executeBatch(): 將一批命令提交給資料庫來執行,如果全部命令執行成功,則返回更新計陣列成的陣列。 vo

vue與vue-i18n結合實現後臺資料的多語言切換

 在XXX.js檔案中定義函式:  getUser(context,info){ context.$http.get(SERVER_URL+'/users',info).then(function(data){ let err =data.body.

5款Python繪相簿,為你輕鬆實現資料視覺化!

讀圖時代,圖片不夠精美絢麗,怎能夠吸引住越來越挑剔的眼睛。而擁有“盛世美顏”的圖片是怎樣煉造而成的呢?大聖眾包小編介紹5款互動式圖表Python繪相簿為你輕鬆實現大資料視覺化! Bokeh   作為一個專門針對Web瀏覽器的呈現功能的互動式視覺化Python庫,B

使用PHPExcel實現資料批量匯出為excel表格

首先需要下載PHPExecel類檔案,幫助文件可以參考PHPExcel中文幫助手冊|PHPExcel使用方法。 下面直接上例子,是我自己寫的一個簡單的批量匯出資料為excel的例子 前臺頁面 比較簡單,就是一個超連結,跳轉到處理頁面,超連結也可以跟一些引數(

微信小程式~開發 Demo 實現發表頁面

實現的結果如下: 分析如何實現 導航欄的實現很簡單就不說了,可參考我之前的文章 重點是中間的 ② 是內容區域 區域三是功能操作區 內容區域的實現 第一個是文字區域 第二個是水平的圖片展示區域 這

【android開發實現語音資料實時採集/播放

今天無意中看到一篇關於android實現語音資料實時採集/播放的文章,感覺寫得非常棒,挺全面的,所以特地轉載了,還有其實還可以根據這篇部落格內容考慮下視訊資料實時採集、播放的實現。部落格原文地址http://blog.csdn.net/lantingshuxu/article/details/5352031

基於ngMockE2E實現後臺資料模擬

   引言    今天老大給了新任務,在開始給我說的時候讓我改造一個指引,上面的流程是比較簡單的,所以在開始的時候 沒有當回事,因為對這些東西比較熟悉了,但是在說完需求以後告訴我這個專案不建立後

python+jinja2實現介面資料批量生成工具

在做介面測試的時候,我們經常會遇到一種情況就是要對介面的引數進行各種可能的校驗,手動修改很麻煩,尤其是那些介面引數有幾十個甚至更多的,有沒有一種方法可以批量的對指定引數做生成處理呢。 答案是肯定的! python的jinja2模板庫可以很好的滿足我們的需求,通過維護一個原始資料模板,將我們想要動態生成的變數模

開發資料庫實現列表觸底自動載入功能開發101

雲開發資料庫之觸底自動載入 在前面的兩篇文章中,我們簡單的談了談雲開發資料庫與傳統資料庫的差異,以及雲開發資料庫中的許可權機制,今天我們來分享一些實用的程式碼,快速幫助大家完成自己的小程式的部分功能。 微信小程式實現觸底自動載入 在開發小程式類資訊流型別的應用時,我們經常會有一個需求,就是當用戶將列表滑動到列

用小程式·開發輕鬆構建二手書商城小程式實戰

“拱手讓書,智慧相傳。本文將帶大家使用雲開發快速開發完整的校園二手書商城“ 導語 很多大學有個普遍現象,畢業或者搬校區的時候,成堆成堆的書都被隨便處理掉,作為過來人,每每想到都十分痛心可惜,而導致這種情況發生的原因,我認為主要還是歸結學校原因,一方面沒有提供靠譜便利的平臺,另一方面,宣傳不到位,基於此開發了

Navicat實現資料模型匯出SQL檔案,迅速生成表

Navicat實現將資料模型匯出SQL檔案,迅速生成表 這次我們不講高大上的程式碼,我們來說一說開發中一個實用的小技能。 直接進入正題 1.首先開啟Navicat工具 2.點選右上角的模型 3.點選新建模型按鈕 4.我們新建一張表,名字為user 4.在表中我們新增資料 5.

ajax+ashx:實現檔案的批量匯出

背景:   最近公司有一個需求,就是實現excle的批量匯出(一次性匯出多個excle)。 實現方式:   想到的實現方式:   1、發起一個匯出請求,然後批量生產需要匯出的excle檔案,最後將檔案生成一個壓縮包,最後將生成的壓縮包輸出到前端頁面。      該方式的優缺點:       優點: