vue上传excel表并读取表单内容

2022-03-22  本文已影响0人  清风昙

1.安装插件npm install xlsx --save
2.封装组件

<template>
  <span class="content" @click="selectExcel">
    <input
      id="uploadFile"
      class="input-file"
      type="file"
      @change="exportData"
      accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
    />
    {{ title }}
  </span>
</template>
<script>
import XLSX from "xlsx";
export default {
  name: "importExcel",
  props: {
    title: {
      type: String,
      default: "导入表格",
    },
  },
  methods: {
    selectExcel() {
      document.getElementById("uploadFile").click();
    },
    exportData(event) {
      if (!event.currentTarget.files.length) {
        return;
      }
      const that = this;
      // 拿取文件对象
      let f = event.currentTarget.files[0];
      // 用FileReader来读取
      let reader = new FileReader();
      // 重写FileReader上的readAsBinaryString方法
      const rABS = true;
      reader.onload = (e) => {
        let dataResult = e.target.result;
        if (!rABS) dataResult = new Uint8Array(dataResult);
        const workbook = XLSX.read(dataResult, {
          type: rABS ? "binary" : "array",
        });
        // 假设我们的数据在第一个标签
        const firstWorksheet = workbook.Sheets[workbook.SheetNames[0]];
        // XLSX自带了一个工具把导入的数据转成json
        const jsonArr = XLSX.utils.sheet_to_json(firstWorksheet, { header: 1 });
        // 通过自定义的方法处理Json,比如加入state来展示
        that.$emit("getResult", jsonArr);
        document.getElementById("uploadFile").value = null;
      };
      if (rABS) reader.readAsBinaryString(f);
      else reader.readAsArrayBuffer(f);
      return false;
    },
  },
};
</script>
<style scoped>
.input-file {
  display: none;
}
.content {
  margin-right: 5px;
}
</style>

3.父组件调用

<template>
  <div >
    <UpExcel title="上传" @getResult="getExcelData"></UpExcel>
  </div>
</template>
<script>
import UpExcel from "./components/upExcel.vue";
export default {
  name: "App",
  components: {
    UpExcel,
  },
  data() {
    return {
    };
  },
  methods: {
    getExcelData(data) {
      // data为读取Excel的原始数据,这里可以对Excel进行格式校验和数据格式化处理
      console.log(data);
    },
  },
};
</script>
上一篇下一篇

猜你喜欢

热点阅读