今天做项目的时候需要通过element-ui
做一个导入excel
并解析成json
数据,下面给大家介绍一下基本代码!
<template> <div class="app-container"> <upload-excel-component :on-success="handleSuccess" :before-upload="beforeUpload" /> <el-table :data="tableData" border highlight-current-row style="width: 100%;margin-top:20px;" > <el-table-column v-for="item of tableHeader" :key="item" :prop="item" :label="item" /> </el-table> </div> </template> <script> import uploadExcelComponent from "@/components/UploadExcel.vue"; export default { name: "UploadExcel", components: { uploadExcelComponent }, data() { return { tableData: [], tableHeader: [] }; }, methods: { beforeUpload(file) { const isLt1M = file.size / 1024 / 1024 < 1; if (isLt1M) { return true; } this.$message({ message: "Please do not upload files larger than 1m in size.", type: "warning" }); return false; }, //成功后获取数据 handleSuccess({ results, header }) { console.log("results=====", results); this.tableData = results; this.tableHeader = header; } } }; </script>
把导入解析封装到UploadExcel里面
<template> <div> <input ref="excel-upload-input" class="excel-upload-input" type="file" accept=".xlsx, .xls" @change="handleClick" /> <div class="drop" @drop="handleDrop" @dragover="handleDragover" @dragenter="handleDragover" > Drop excel file here or <el-button :loading="loading" style="margin-left:16px;" size="mini" type="primary" @click="handleUpload" > Browse </el-button> </div> </div> </template> <script> import XLSX from "xlsx"; export default { props: { beforeUpload: Function, // eslint-disable-line onSuccess: Function // eslint-disable-line }, data() { return { loading: false, excelData: { header: null, results: null } }; }, methods: { generateData({ header, results }) { this.excelData.header = header; this.excelData.results = results; this.onSuccess && this.onSuccess(this.excelData); }, handleDrop(e) { e.stopPropagation(); e.preventDefault(); if (this.loading) return; const files = e.dataTransfer.files; if (files.length !== 1) { this.$message.error("Only support uploading one file!"); return; } const rawFile = files[0]; // only use files[0] if (!this.isExcel(rawFile)) { this.$message.error( "Only supports upload .xlsx, .xls, .csv suffix files" ); return false; } this.upload(rawFile); e.stopPropagation(); e.preventDefault(); }, handleDragover(e) { e.stopPropagation(); e.preventDefault(); e.dataTransfer.dropEffect = "copy"; }, handleUpload() { this.$refs["excel-upload-input"].click(); }, handleClick(e) { const files = e.target.files; const rawFile = files[0]; // only use files[0] if (!rawFile) return; this.upload(rawFile); }, upload(rawFile) { this.$refs["excel-upload-input"].value = null; // fix can't select the same excel if (!this.beforeUpload) { this.readerData(rawFile); return; } const before = this.beforeUpload(rawFile); if (before) { this.readerData(rawFile); } }, readerData(rawFile) { this.loading = true; return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = e => { const data = e.target.result; const workbook = XLSX.read(data, { type: "array" }); const firstSheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[firstSheetName]; const header = this.getHeaderRow(worksheet); const results = XLSX.utils.sheet_to_json(worksheet); this.generateData({ header, results }); this.loading = false; resolve(); }; reader.readAsArrayBuffer(rawFile); }); }, getHeaderRow(sheet) { const headers = []; const range = XLSX.utils.decode_range(sheet["!ref"]); let C; const R = range.s.r; /* start in the first row */ for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */ const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]; /* find the cell in the first row */ let hdr = "UNKNOWN " + C; // <-- replace with your desired default if (cell && cell.t) hdr = XLSX.utils.format_cell(cell); headers.push(hdr); } return headers; }, isExcel(file) { return /\.(xlsx|xls|csv)$/.test(file.name); } } }; </script> <style scoped> .excel-upload-input { display: none; z-index: -9999; } .drop { border: 2px dashed #bbb; width: 600px; height: 160px; line-height: 160px; margin: 0 auto; font-size: 24px; border-radius: 5px; text-align: center; color: #bbb; position: relative; } </style>
这样应该可以了!
如何利用PHPExcel类库建php将数据格式转为excel
上面是“vuejs导入excel(把excel表格解析成JSON数据)”的全面内容,想了解更多关于 vuejs 内容,请继续关注web建站教程。
当前网址:https://m.ipkd.cn/webs_2394.html
声明:本站提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请发送到邮箱:admin@ipkd.cn,我们会在看到邮件的第一时间内为您处理!