「趣学前端」读取 Excel 文件内容
前言
我们在做业务需求的时候,会遇到展示表格的页面,如果只有一个表格,我们可以直接把内容填充到我们的代码中,有时候业务需要不同的分类展示不同的表格,而表格内容是静态的,这类需求,我之前的处理是写个本地 json 文件,每次新增让产品直接把数据录到 json 文件中。有时候业务会把 Excel 表格发给我,我自己进行录入。闲暇的时候我在想,可否通过解析 Excel 文件直接拿到内容呢?
于是我进行了后面的尝试。
Excel 文件的读取
目标功能
我想实现的功能主要有几部分:读取 Excel 文件,识别多个工作表,每个工作表按行将数据放入数组中。最终解析输入如下:
Excel 文件数据
两个工作表:鞋子和裤子
读取的完整数据
下面我将功能进行细分。
读取 Excel 文件
解析插件
插件:xlsx.core.min.js
官网:https://github.com/sheetjs/sheetjs
读取方法
FileReader 可以读取 Excel 文件内容,它的详细知识点可以查看MDN
我这里使用的 FileReader.readAsBinaryString(file) :开始读取指定的 Blob 中的内容。一旦完成,result 属性中将包含所读取文件的原始二进制数据。
HTML 部分
包括文件上传和数据内容展示两部分,其中文件上传有限制文件类型必须是.xls 或.xlsx 后缀的。
上传操作
文件读取
XLSX 为 sheetjs 插件提供的方法
XLSX.read(data, read_opts):尝试解析 data;
workbook.SheetNames 是工作簿中工作表的有序列表;
wb.Sheets[sheetname] 返回一个代表工作表的对象;
XLSX.utils.sheet_to_json 生成不同类型的 JS 对象;
重组 Excel 文件数据
1、现在的数据 key 为工作表表头的值,是中文名称,可以根据定义的变量名进行数据重组,所以我加了一个变量枚举 renameObj。注:如果多个工作表的表头不一致,可重置 renameObj 对象,并改造 resetTableData 方法内的代码即可;
2、resetTableData 方法会将数据的所有 key 替换成枚举中的变量值;
3、变量 arrayData 为最终的处理之后的 Excel 数据,这时已经将 Excel 文件中的数据处理成了方便前端在页面回显的数据。
浏览器展示
完整代码
总结
日常开发中,如果觉得哪些不方便、不顺手的,不妨写个小工具协助开发,避免简单的重复的工作占用我们过多的时间。
版权声明: 本文为 InfoQ 作者【叶一一】的原创文章。
原文链接:【http://xie.infoq.cn/article/c322ae49e8c6e835ee0e47f70】。文章转载请联系作者。
评论