纯前端完成导入xlsx回显到表格

358 阅读1分钟

使用xlsx解析表格

虽然有时候是前端传给后端一个文件吗,后端返回构造好的数据。但是也经常遇到,要求前端来进行解析,那有什么办法,还是要惯着噻。文章有不妥之处,欢迎大佬指教(´▽ʃ♡ƪ) 在使用之前还是建议小伙伴们先阅读一个npm上的介绍[ 传送门 ](https://www.npmjs.com/package/xlsx) 代码如下(写的react,原生js同理)`

// 导入
import XLSX from "xlsx";

按钮

<input
  type="file"
  onChange={(event) => {
    this.importData(event);
  }}
/>

点击按钮逻辑

importData = (e) => {
    // 获取excel 文件参数(files)
    let workbook,
      tableList = [];
    let files = e.target.files[0];
    let suffix = e.target.files[0].name.split(".")[1];
    // 判断文件类型是不是xlsx 格式
    if (suffix != "xls" && suffix != "xlsx") {
      return message.warning("文件类型不正确");
    }
    // 定义FileReader对象
    let reader = new FileReader();
    //  文件读取成功完成时触发
    reader.onload = (ev) => {
      // 文件里的文本会在这里被打印出来
      try {
        let data = ev.target.result;
        workbook = XLSX.read(data, { type: "binary" }); // 以二进制流方式读取得到整份excel表格对象
      } catch (e) {
        console.log(e);
        message.warning("文件类型不正确");
        return;
      }
      // 表格的表格范围,可用于判断表头是否数量是否正确
      let fromTo = "";
      // 遍历每张表读取
      for (let sheet in workbook.Sheets) {
        if (workbook.Sheets.hasOwnProperty(sheet)) {
          fromTo = workbook.Sheets[sheet]["!ref"];
          let obj = {};
          obj[sheet] = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]);
          tableList.push(obj);
          // break; // 如果只取第一张表则加上
        }
      }
      // 把获取的表格数据进行赋值
      console.log("获取到的表格数据----", workbook, tableList);
      //  显示弹窗
      // this.showfile = true;
    };
    // 以二进制方式打开文件
    reader.readAsBinaryString(files);
  };