效果圖:
程式碼實現:
一、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"]] // ]