安装npm依赖
npm i xlsx -S
1、点击button 打开上传文件页面

2、解析数据

3、完整代码
<template> <div class="excel-wrapper"> <!-- 上传按钮 --> <input class="input-file" type="file" @change="exportData" style="display:none" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" /> <el-button type="success" size="small" @click="btnClick">上传excel</el-button> <!-- END --> <!-- 表格 --> <el-table :data="tableData" style="width: 100%" height="450" size="mini"> <el-table-column :prop="item" :label="item" width="140" v-for="(item,index) in checkboxTableColumn" :key="'column'+index"> </el-table-column> </el-table> <!-- END --> <!-- 分页 --> <el-pagination v-if="excelData != 0" @size-change="handleSizeChange" @current-change="CurrentChange" :current-page="currentPage" :page-sizes="[10, 20, 30,40,50,100,200,500]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> <!-- END --> </div> </template> <script> import * as XLSX from 'xlsx' export default { data() { return { //所有键的值 columnHeader: [], // 导入的excel的数据 excelData: [], // 表格显示列 checkboxTableColumn: [], //表格数据 tableData: [], // 当前分页 currentPage: 1, // 每页显示数量 pageSize: 10, // 数据总数 total: 0, } }, methods: { // 将上传input框点击事件改为按钮 btnClick() { document.querySelector('.input-file').click() }, // 解析excel exportData(event) { if (!event.currentTarget.files.length) { return } const that = this // 拿取文件对象 let f = event.currentTarget.files[0] //这里已经拿到了excel的file文件,若是项目需求,可直接$emit丢出文件 // that.$emit('getMyExcelData',f); // 用FileReader来读取 let reader = new FileReader() // 重写FileReader上的readAsBinaryString方法 // FileReader.prototype.readAsBinaryString = function(f) { // let binary = ""; // let wb; // 读取完成的数据 // let outdata; // 你需要的数据 // let reader = new FileReader(); reader.onload = function (e) { // 读取成Uint8Array,再转换为Unicode编码(Unicode占两个字节) // let bytes = new Uint8Array(reader.result); // let length = bytes.byteLength; // for (let i = 0; i < length; i++) { // binary += String.fromCharCode(bytes[i]); // } var data = e.target.result // 接下来就是xlsx var wb = XLSX.read(data, { type: 'buffer', }) var outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]) // 导出格式为json,{表数据:[]} console.log(outdata) that.excelData = outdata that.tableData = outdata.slice(0, 10) that.total = outdata.length // 获取数据的key var importDataThead = Array.from(Object.keys(outdata[0])).map( (item) => { return item } ) that.columnHeader = importDataThead that.checkboxTableColumn = importDataThead.slice(0, 9) console.log(importDataThead) } reader.readAsArrayBuffer(f) // }; // reader.readAsBinaryString(f); }, // 分页切换 CurrentChange(val) { this.currentPage = val this.tableData = this.excelData.slice( (val - 1) * this.pageSize, val * this.pageSize - 1 ) }, // 每页显示数量改变 handleSizeChange(val) { this.pageSize = val this.tableData = this.excelData.slice( (this.currentPage - 1) * val, this.currentPage * val - 1 ) }, }, } </script> <style scoped> .excel-wrapper { /* height: 100vh; */ /* width: 600px; */ overflow: scroll; background: rgb(226, 226, 226); padding: 20px; } </style>