6

小程序導出數據到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相關的技術故事/技術實戰經驗,請掃碼關注【騰訊雲雲開發】公衆号~!

圖片描述


如果覺得我的文章對你有用,請随意贊賞

你可能感興趣的

phperstar · 9月12日

數據量特别大的情況下,會不會就執行超時了

回複

0

需要設置一個超時時間就好了

CloudBase 作者 · 9月12日
載入中...