新建一个js文件exportXLSX.jsimportXLSXfrom'xlsx'//将sheet转换为最终excel文件的blob对象,然后使用URL.createObjectURL下载functionsheet2blob(sheet,sheetName){sheetName=sheetName||'工作表1';varworkbook={SheetNames:[sheetName],Sheets:{}};workbook.Sheets[sheetName]=sheet;//生成excel的配置项varwopts={bookType:'xlsx',//要生成的文件类型bookSST:false,//是否生成SharedStringTable,官方的解释是如果启用,生成速度会降低,但对低版本IOS设备有更好的兼容性type:'binary'};varwbout=XLSX.write(工作簿,wopts);varblob=newBlob([s2ab(wbout)],{type:"application/octet-stream"});//字符串到ArrayBufferfunctions2ab(s){varbuf=newArrayBuffer(s.length);varview=newUint8Array(buf);对于(vari=0;i!=s.length;++i)view[i]=s.charCodeAt(i)&0xFF;返回缓冲器;}返回斑点;}/***打开下载对话框的通用方法,具体兼容性未测试*@paramurl下载地址,也可以是blob对象,必填*@paramsaveName保存文件名,可选*/functionopenDownloadDialog(url,saveName){if(typeofurl=='object'&&你linstanceofBlob){url=URL.createObjectURL(url);//创建blob地址}varaLink=document.createElement('a');aLink.href=url;aLink.download=保存名称||'';//HTML5新属性,指定不带后缀的保存文件名,注意在file:///模式var事件中不会生效;如果(window.MouseEvent)event=newMouseEvent('click');else{event=document.createEvent('MouseEvents');event.initMouseEvent('click',true,false,window,0,0,0,0,0,false,false,false,false,0,null);}aLink.dispatchEvent(event);}/***@param{Array}json表数据*@param{Array}fieldsheadername*@param{Object}titlesheadername{fieldname:headername}*@param{String}fileName文件名*/exportdefaultfunctionexportXLSX(json,fields,titles,fileName){constsheet=XLSX.utils.json_to_sheet(json,{header:fields})constrange=XLSX.utils.decode_range(sheet['!ref'])for(letc=range.s.c;c<=range.e.c;c++){constheader=XLSX.utils.encode_col(c)+'1'sheet[header].v=titles[sheet[header].v]}openDownloadDialog(sheet2blob(sheet),fileName);}导入js文件通过importexportXLSXfrom"@/utils/exportXLSX"调用exportXLSX函数传入json数组,表头名称,文件名,表头即可出口
