components/HelloWorld.vue

88 阅读1分钟
  <div class="hello">
    <el-button type="success" >导出</el-button>
    <hr>
    <el-upload class="upload-demo" accept=".xlsx,.csv,.xls" action="" :show-file-list="true" :on-change="importExcel">
      <el-button type="primary">导入</el-button>
    </el-upload>
    <hr>
    <el-table :data="tableData" style="width:100%" class="table">
      <el-table-column prop="id" label="序号" width="180" name=""></el-table-column>
      <el-table-column prop="name" label="姓名" width="180" name=""></el-table-column>
      <el-table-column prop="age" label="年龄" width="180" name=""></el-table-column>
      <el-table-column prop="address" label="地址" name=""></el-table-column>
    </el-table>
  </div>
</template>

<script>
import * as XLSX from 'xlsx'

export default{
  name: 'HelloWorld',
  data(){
    return {
      tableData:[]
    }
  },
  methods:{
    importExcel(file) {
      let that = this
      // console.log(file,'表')
      let { raw } = file
      //读取文件内容
      let render = new FileReader()
      //按照字节读取文件内容,再用ArrayBuffer表示
      render.readAsArrayBuffer(raw)
      render.onload = function () {  //文件加载完触发回调
        // 将读取的文件内容保存到一个 ArrayBuffer 对象
        const buffer = render.result
        //将 ArrayBuffer 对象转换为 Uint8Array 类型的字节数组
        const bytes = new Uint8Array(buffer)
        const length = bytes.byteLength
        let binary = ''
        for (let i = 0; i < length; i++) {
          // 将字节数组逐字节转换为字符,并拼接成字符串
          binary += String.fromCharCode(bytes[i])
        }
        // 使用 XLSX 库的 read 函数解析二进制字符串为工作簿对象
        const bg = XLSX.read(binary, { type: 'binary' })
        // 获取工作簿的第一个工作表
        const outData = XLSX.utils.sheet_to_json(bg.Sheets[bg.SheetNames[0]])
        console.log(outData,'数据')
        let outarr = [...outData]
        let arr = []
        // 将工作表的每一行数据映射为新的对象,并添加到 arr 数组中
        outarr.map(v => {
          let obj = {}
          obj.id = v.序号
          obj.name = v.姓名
          obj.age = v.年龄
          obj.address = v.地址
          arr.push(obj)
        })
        // 将处理后的数据赋值给组件的 tableData 属性
        that.tableData = arr
      }
    },
  }
}
</script>

<style scoped>

</style>