通过xlsx库解析读取excel表格内容

一、使用

有时项目中有需要前端自己将本地的excel文件导入并获取内部数据,最终处理数据(批量导入等场景)

这时我们就可以用到一个库(xlsx)来读取excel中的内容,然后通过其API能力将数据转换成json格式

具体使用如下:

bash 复制代码
const TABLE_HEADER_ENUM = {
  	姓名: 'name',
  	工号: 'workId',
  	班次: 'shift',
  	月份: 'month',
  	日期: 'date',
  	年份: 'year'
  };
  
// 导入
  const fileImport = file => {
  // 通过FileReader对象读取文件
    const fileReader = new FileReader();
    fileReader.onload = event => {
      try {
        const { result } = event.target;
        // 以二进制流方式读取得到整份excel表格对象
        const workbook = XLSX.read(result, { type: 'binary' });
        // 存储获取到的数据
        const data = {};
        const tempData = [];
        // 遍历每张工作表进行读取(这里默认只读取第一张表)
        for (const sheet in workbook.Sheets) {
          if (Object.prototype.hasOwnProperty.call(workbook.Sheets, sheet)) {
          // 利用 sheet_to_json 方法将 excel 转成 json 数据
            data[sheet] = tempData.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));
          }
        }
        const firstSheetData = data[Object.keys(workbook.Sheets)[0]];
        const importData = [];
        firstSheetData.forEach(item => {
          const itemObj = {};
          for (const attr in item) {
            const key = TABLE_HEADER_ENUM[attr] ? TABLE_HEADER_ENUM[attr] : attr; 
            
            itemObj[key] = item[attr];
          }
          importData.push(itemObj);
        });
        // 这里最终处理完的importData就是一个对象数组
      } catch (e) {
        Message.error(
          e.message || '文件导入失败',
        );
      }
    };
    // 以二进制方式打开文件
    fileReader.readAsBinaryString(file[0].originFileObj);
  };

备注: 上文中的TABLE_HEADER_ENUM 是一个标题的中英文映射对象,因为我们excel表中标题经常是中文的,但接口中的传递字段基本都为英文,所以这个由你们实际excel表中的标题自定义

总结

这里我就简单记录下,有需要的小伙伴可以参考下

相关推荐
执行部之龙14 分钟前
JS手写——call bind apply
前端·javascript
吴声子夜歌29 分钟前
JavaScript——函数
开发语言·javascript·ecmascript
SuperEugene34 分钟前
Vue3 + Element Plus 表单开发实战:防重复提交、校验、重置、loading 统一|表单与表格规范篇
前端·javascript·vue.js
SuperEugene36 分钟前
Vue3 + Element Plus 中后台弹窗规范:开闭、传参、回调,告别弹窗地狱|Vue 组件与模板规范篇
开发语言·前端·javascript·vue.js·前端框架
孟祥_成都39 分钟前
前端下午茶:这 3 个网页特效建议收藏(送源码)
前端·javascript·css
SuperEugene39 分钟前
VXE-Table 4.x 实战规范:列配置 + 合并单元格 + 虚拟滚动,避坑卡顿 / 错乱 / 合并失效|表单与表格规范篇
开发语言·前端·javascript·vue.js·前端框架·vxetable
cmd1 小时前
别再用错!5种JS类型判断方法,从原理到实战一文吃透
前端·javascript
Irene19911 小时前
JavaScript 事件循环(Event Loop) 的运作流程(附:queueMicrotask() 将一个回调函数立即排队到微任务队列中)
javascript·事件循环·宏任务·微任务·调用栈·queuemicrotask
wobi_baoyan1 小时前
【已解决】使用Maven打包发生或者启动Spring Boot项目发生 错误: 不支持发行版本 17
服务器·前端·javascript
学以智用1 小时前
# TypeScript 高级特性(核心+实用)
前端·javascript·typescript