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

CloudBase發表於2019-09-10

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

圖片描述

相關文章