vue 導入導出Excel文件(使用js-xlsx庫)
官方地址Github
安裝npm install xlsx --s
簡單二次封裝js-xlsx庫導入導出功能
封裝為excel.js
/* eslint-disable */ import XLSX from 'xlsx'; /** * @description: * @param {Object} json 服務端發過來的數據 * @param {String} name 導出Excel文件名字 * @return: */ function exportExcel(json, name) { /* convert state to workbook */ var data = new Array(); var keyArray = new Array(); for (const key1 in json) { if (json.hasOwnProperty(key1)) { const element = json[key1]; var rowDataArray = new Array(); for (const key2 in element) { if (element.hasOwnProperty(key2)) { const element2 = element[key2]; rowDataArray.push(element2); if (keyArray.length < getLength(element)) { keyArray.push(key2); } } } data.push(rowDataArray); } } data.splice(0, 0, keyArray); const ws = XLSX.utils.aoa_to_sheet(data); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, "SheetJS"); /* generate file and send to client */ XLSX.writeFile(wb, name + ".xlsx"); } /** * @description: 導入excel文件並返回數據 * @param {function} 回調函數參數data,dataRef,一個是數據,一個是exce表單的索引 * @return: */ function importExcel(callback) { var inputObj = document.createElement('input') inputObj.setAttribute('id', 'file'); inputObj.setAttribute('type', 'file'); inputObj.setAttribute('name', 'file'); inputObj.setAttribute("style", 'visibility:hidden'); inputObj.setAttribute("accept", ".xlsx,.xls,.csv") inputObj.addEventListener('change', (evt) => { const files = evt.target.files; if (files && files[0]) _file(files[0], (data, dataRef) => { callback(data, dataRef) }); }