介绍最近的一个项目,实现一个Excel导入导出功能。搜索了一些插件后,找到了js-xlsx插件,于是尝试使用。在这里我将使用它并遇到它。只是记录问题。SheetJSjs-xlsx是一款可以读写多种格式表格的插件。浏览器支持很好,可以在多种语言平台上使用。目前github上有14kstars。插件地址:https://github.com/SheetJS/js...使用1.安装依赖到项目文件夹,安装xlsxyarnaddxlsx2。项目中引入import*asXLSXfrom'xlsx'导出Excel函数实现1.定义导出时需要使用的方法exportdefaultfunctiondownload(json,fileName){consttype='xlsx'//定义formatofexportedfilevartmpDown;//导出内容vartmpdata=json[0];json.unshift({});varkeyMap=[];//获取键(varkintmpdata){keyMap.push(k);json[0][k]=k;}vartmpdata=[];//用来保存转换后的jsonjson.map((v,i)=>keyMap.map((k,j)=>Object.assign({},{v:v[k],位置:(j>25?getCharCol(j):String.fromCharCode(65+j))+(i+1)}))).reduce((prev,next)=>prev.concat(next)).forEach((v,i)=>tmpdata[v.position]={v:v.v});varoutputPos=Object.keys(tmpdata);//设置区域,比如表格从A1到D10vartmpWB={SheetNames:['mySheet'],//保存表格标题Sheets:{'mySheet':Object.assign({},tmpdata,//内容{'!ref':outputPos[0]+':'+outputPos[outputPos.length-1]//设置填充区域})}};tmpDown=newBlob([s2ab(XLSX.write(tmpWB,{bookType:(type==undefined?'xlsx':type),bookSST:false,type:'binary'}//这里的数据用来定义导出格式类型))],{类型:""});//创建将二进制对象写入转换后的字节流saveAs(tmpDown,fileName);}functionsaveAs(obj,fileName){//导出函数实现vartmpa=document.createElement("a");tmpa.download=文件名||“下载”;tmpa.href=URL.createObjectURL(obj);//绑定一个标签tmpa.click();//模拟点击实现下载setTimeout(function(){//延时释放URL.revokeObjectURL(obj);//使用URL.revokeObjectURL()释放该对象URL},100);}functions2ab(s){//string到字符流varbuf=newArrayBuffer(s.length);varview=newUint8Array(buf);对于(vari=0;i!=s.length;++i)view[i]=s.charCodeAt(i)&0xFF;returnbuf;}functiongetCharCol(n){让temCol='',s='',m=0while(n>0){m=n%26+1s=String.fromCharCode(m+64)+sn=(n-m)/26}returns}2.在项目中使用export方法//exportexcel//exportexceldownloadExl=()=>{const{results}=this.props//需要导出的json数据letdatas=_.clone(results)//为了不影响项目数据的使用,这里使用了lodash中的deepclone方式letjson=datas.map(item=>{//将json数据的键名替换为导出需要的键名return{'人员ID':item.id,'姓名':item.name,'证书类型':this.findIdType(item.idType),//将类型码转换为汉字'证件号':item.credentialsId,'固定电话':item.tel,'手机':item.mobile}})download(json,'人事信息.xlsx')//导出文件名}3.绑定事件
