Ai
1 Star 12 Fork 2

王佳斌/(Vue)本地上传 Excel 文件页面表格预览(配合 ElementUI 带分页)

Create your Gitee Account
Explore and code with more than 13.5 million developers,Free private repositories !:)
Sign up
文件
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
Clone or Download
App.vue 4.18 KB
Copy Edit Raw Blame History
王佳斌 authored 2021-07-30 16:50 +08:00 . 具体运行看README.md
<template>
<div id="app">
<!-- 上传按钮 -->
<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 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>
#app{
width: 600px;
overflow: scroll;
background: rgb(226, 226, 226);
padding: 20px;
}
</style>
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/wangjiabin-x/vuePreExcel.git
git@gitee.com:wangjiabin-x/vuePreExcel.git
wangjiabin-x
vuePreExcel
(Vue)本地上传 Excel 文件页面表格预览(配合 ElementUI 带分页)
master

Search