微信小程式實現生成excel,xlsx.mini.min下載地址

danmo_xx發表於2024-06-25

效果圖:

程式碼實現:

一、npm install xlsx

二、下載安裝sheetjs檔案

連結:https://git.sheetjs.com/sheetjs/sheetjs
開啟dist目錄下的xlsx.mini.min.js 右上角有下載圖示點選即可(根據開發需求可下載其他版本)

三、js頁面內引入檔案

var xlsx = require("../../utils/xlsx.mini.min");

四、bindtap點選事件

<view class="button" style="margin-top:20rpx;" bind:tap="exportExcel">生成excel</view>

五、

 exportExcel() {
    let dataNum = wx.getStorageSync('key'); //excel資料
    const data = dataNum;
    // 構建一個表的資料
    let sheet = [];
    let titles = ['測量次數'];//固定顯示,可參考效果圖
    let longestArray = data[0]; // 假設第一個陣列是最長的,用於比較  
    let longestLength = longestArray.length;
    // 遍歷陣列集合,找出最長的陣列 ,做標題
    for (let i = 1; i < data.length; i++) {
      if (data[i].length > longestLength) {
        longestArray = data[i];
        longestLength = data[i].length;
      }
    }
    longestArray.forEach((item, i) => {
      let title = '標題' + (i + 1);
      titles.push(title);
    })
    sheet.push(titles)
    data.forEach((item, ii) => {
      let content = [];
      let qqq = [ii + 1]; //列的次數
      let abc = item;
      content = [...qqq, ...abc]
      sheet.push(content);
    })

    // XLSX外掛使用
    var ws = xlsx.utils.aoa_to_sheet(sheet);
    var wb = xlsx.utils.book_new();
    xlsx.utils.book_append_sheet(wb, ws, "測量");
    var fileData = xlsx.write(wb, {
      bookType: "xlsx",
      type: 'base64'
    });
    let filePath = `${wx.env.USER_DATA_PATH}/測量.xlsx`
    // 寫檔案
    const fs = wx.getFileSystemManager()
    fs.writeFile({
      filePath: filePath,
      data: fileData,
      encoding: 'base64',
      bookSST: true,
      success(res) {
        const sysInfo = wx.getSystemInfoSync()
        // 匯出
        if (sysInfo.platform.toLowerCase().indexOf('windows') >= 0) {
          // 電腦PC端匯出
          wx.saveFileToDisk({
            filePath: filePath,
            success(res) {
              console.log(res)
            },
            fail(res) {
              console.error(res)
              util.tips("匯出失敗")
            }
          })
        } else {
          // 手機端匯出
          // 開啟文件
          wx.openDocument({
            filePath: filePath,
            showMenu: true,
            success: function (res) {
              console.log(res, '開啟文件成功')
            },
            fail: console.error
          })
        }

      },
      fail(res) {
        console.error(res)
        if (res.errMsg.indexOf('locked')) {
          wx.showModal({
            title: '提示',
            content: '文件已開啟,請先關閉',
          })
        }
      }
    })
  }

補充說明:資料格式

      // content = [
      //   [0, "45001SR,127,45001SR,-6.7,內板87,600,OFFION,in/mm,ZERO,總成127"],
      //   [1, ["44009S,內板79,44010SP,內板78,5.48,5.96,OFF/ON,in/mm,ZERO,總成120,OFF/ON,in/mm,ZERO,OFF/ON,in/mm,ZERO,總成119,總成118,121,44007SR,44007SR,-6.1,內板81,45001SR,127,45001SR,-6.7,內板87,45004SR"]]
      // ]

相關文章