前言【负责人A】:现在报表部分基于界面的Excel导入导出功能有点慢。前端能不能实现这个功能,然后我们对比一下效果!【切图B】:界面优化不了?比如检查慢的原因什么的。【负责人A】:现在后端开发任务比较重,要处理的核心任务也涉及到一些结构调整,所以我觉得前端这边可以搞定,然后再看整体效果。【切图B】:OK,试试看~施施~下面是基于xlsx的第三方库,封装了一个解析数据:
Excel数据格式Excel数据格式有两种,一种是带表头描述,一种是不带表头描述,具体内容如下:带表头描述不带表头描述实现Excel转JSON功能核心步骤是通过FileReader以二进制方式读取Excel文件,即fileReader.readAsBinaryString(file)通过`XLSX.read(fileData,{type:"binary"})`方法生成对应的二进制数据生成`workbook`对象workbook.SheetNames[0]获取第一个Sheet的名称wsname,因为sheet是一个有序列表,所以可以有多个Sheet,通过XLSX.utils.sheet_to_json(workbook.Sheets[wsname])方法将对应的Sheet内容转化为JSON数据。表头描述没有表头描述具体代码//读取对应的表文件constreaderExcel=(file:File)=>{constfileReader=newFileReader();//以二进制格式读取表内容fileReader.readAsBinaryString(file);//读取表内容fileReader.onload=(event:any)=>{try{constfileData=event.target.result;constworkbook=XLSX.read(fileData,{type:"binary",});//表格是有序列表,所以可以取多个Sheet,这里取第一个Sheetconstwsname=workbook.SheetNames[0];//根据表格内容生成json数据constsheetJson=XLSX.utils.sheet_to_json(workbook.Sheets[wsname]);控制台日志(sheetJson);//获取表格JSON内容}catch(e){console.log(e);返回假;}};};//TriggerconstonChange=(event)=>{//获取文件对象constfile=event.target.files[0];//读取文件内容readerExcel(file);//清除数据clearFile();};constclearFile=()=>{excelRef.value.value="";};格式化JSON数据,需要考虑有header描述和没有header描述的情况。为便于统一处理,特作如下规定:将带头描述的数据格式统一转换为不带头描述的数据格式。没有header描述的数据格式统一转换为标准的接口入参,即{key:value}。在这里,需要创建一个名称->密钥。映射关系:constexcelNameToKey={'name':"姓名",'age':"年龄",'专业':"技能",'telephone':"电话",'address':"地址",};format改造如下:核心代码如下:JSON导出到Excel基本结构页面内容也很简单,如下:{{excelData}}
JSONdata:</h1>
{{jsonData}}
