引言

后台管理系统中有时会出现需要导入表格的情况,因此查阅资料封装此功能

下载插件

npm i xlsx

封装组件

第一种

<!-- uploadExcel.vue -->
<template><div><el-uploadref="upload"action="/":on-change="onChange":auto-upload="false":show-file-list="false"accept=".xls, .xlsx"><el-button type="warning" icon="el-icon-folder-add">导入表格</el-button></el-upload></div>
</template><script>
import XLSX from 'xlsx';
export default {data () {return {// 上传的文件fileData: ''};},methods: {// 文件改变事件onChange (file) {// 保存当前选择文件this.fileData = file;// 调用读取数据的方法this.readExcel();},// 读取数据readExcel () {const files = this.fileData;if (!files) {// 没有文件return false;} else if (!/\.(xls|xlsx)$/.test(files.name.toLowerCase())) {this.$message.error('请上传xls或者xlsx文件');return false;}const fileReader = new FileReader();fileReader.onload = (e) => {try {const data = e.target.result;const workbook = XLSX.read(data, {type: 'binary'});if (workbook.SheetNames.length >= 1) {this.$message.success('导入成功');}// 取第一张表const wsname = workbook.SheetNames[0];// 生成json表格内容const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname]);this.$emit('getUploadData', ws);// 清空value值,不然页面为刷新时无法重复使用this.$refs.upload.value = '';} catch (e) {return false;}};fileReader.readAsBinaryString(files.raw);}}
};
</script><style lang="less" scoped>
</style>

页面中使用

<template><div><upload-excel @getUploadData="getExcelData"></upload-excel></div>
</template><script>
import UploadExcel from '@/components/table/uploadExcel.vue';
export default {data () {return {// 上传表格处理完成的数据uploadData: []};},methods: {getExcelData (data) {let obj = {};const list = [];data.forEach((item) => {obj = {};for (const key in item) {if (key === '日期') {obj.date = item[key];} else if (key === '姓名') {obj.name = item[key];} else if (key === '地址') {obj.address = item[key];} else {obj.ceshi = item[key];}}list.push(obj);});this.uploadData = list;}},components: {UploadExcel}
};
</script>

第二种

<!-- index.vue-->
<template><div><inputclass="input-file"type="file"accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"@change="exportData"/><button @click="btnClick">导入参数</button></div>
</template><script>
import XLSX from 'xlsx';export default {methods: {btnClick () {document.querySelector('.input-file').click();},exportData (event) {if (!event.currentTarget.files.length) {return;}// 拿取文件对象const f = event.currentTarget.files[0];// 用FilefileReader 来读取const fileReader = new FileReader();// 重写FileReader上的readAsBinaryString方法FileReader.prototype.readAsBinaryString = (f) => {let binary = '';let wb; // 读取完成的数据let outdata; // 你需要的数据const fileReader = new FileReader();fileReader.onload = (e) => {// 读取成Uint8Array,再转换为Unicode编码(Unicode占两个字节)const bytes = new Uint8Array(fileReader.result);const length = bytes.byteLength;for (let i = 0; i < length; i++) {binary += String.fromCharCode(bytes[i]);}// 接下来就是xlsx了,具体可看apiwb = XLSX.read(binary, {type: 'binary'});outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);// 自定义方法向父组件传递数据this.$emit('getResult', outdata);// 清空value值,不然页面为刷新时无法重复使用document.querySelector('.input-file').value = '';};fileReader.readAsArrayBuffer(f);};fileReader.readAsBinaryString(f);}}
};
</script><style scoped>
.input-file {display: none;
}
</style>

页面中使用

<template><div><my-table @getUploadData="getExcelData"></my-table></div>
</template><script>
import MyTable from '@/components/table/index.vue';
export default {data () {return {uploadData: []};},methods: {getExcelData (data) {let obj = {};const list = [];data.forEach((item) => {obj = {};for (const key in item) {if (key === '日期') {obj.date = item[key];} else if (key === '姓名') {obj.name = item[key];} else if (key === '地址') {obj.address = item[key];} else {obj.ceshi = item[key];}}list.push(obj);});this.uploadData = list;}},components: {MyTable}
};
</script><style lang="less" scoped>
</style>

根据资料做的修改,仅供参考,具体需求根据项目变动

vue 使用 XLSX 导入表格相关推荐

  1. vue项目xlsx导入

    vue项目xlsx导入并且将数据导入element-ui的表格中 npm i xlsx 安装 <el-uploadaction="":multiple="false ...

  2. vue使用XLSX下载表格

    下载 import XLSX from 'xlsx';let body =[{name:'zs', age: 15}];let header = ['name', 'age'];let name = ...

  3. vue+xlsx实现表格的导入导出:

    文章目录 一.vue前端使用xlsx和 xlsx-style 导出excel,并修改样式: 1.改造后效果: 2.实现: 3.引入库xlsx-style 4.excelUtil.js文件 二.前端xl ...

  4. XLSX + VUE获取表格内容,实现下载模板、导入表格、导出表格功能

    安装依赖 npm install xlsx --save template-用的element <el-upload:file-list="fileList"accept=& ...

  5. vue实现导入表格数据【纯前端实现】

    一.文章引导 #mermaid-svg-j9HOnISPE2Hyb9Zj {font-family:"trebuchet ms",verdana,arial,sans-serif; ...

  6. vue加element 实现Excel导入表格

    Excel 导入表格 1:先安装三个依赖包 npm install -S file-saver npm install -S xlsx npm install -D script-loadere 2: ...

  7. 导入表格excel的方法+sqlsrver数据导入(.xlsx):未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序

    sqlsrver数据导入(.xlsx):未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序 解决方法 弹窗提示下面错误 解决方法:下载AccessDa ...

  8. vue使用xlsx、xlsx-style和fileSaver导出excel表格

    本文引用 xlsx-style坑记录 Vue使用xlsx和xlsx-style纯前端导出带样式的Excel vue导出Excel表格,报错utils of undefined 是版本原因 前期准备工作 ...

  9. Vue 实现 Excel 导入功能

    前言 在实际开发中导入功能是非常常见的,导入功能前端并不难,难的是后端字段的对应,主要处理在后端. 我们只需要用饿了吗ui upload上传组件封装一层就可以了,主要起到上传文件作用. 通过按钮跳转到 ...

最新文章

  1. 连接ORACLE实例
  2. 自学python的书籍逐级推荐-适合初学者和经验的十大最佳Python书籍-2018
  3. python爬虫框架怎么安装_celery如何在python爬虫中安装?
  4. FPGA数据传输模块设计
  5. Golang原生sql操作Mysql数据库增删改查
  6. java策略_java策略模式
  7. python监控某个程序_写一个python的服务监控程序
  8. linux 进程线程限制,LINUX停每进程限制线程数量
  9. jQuery琐碎笔记
  10. Brave 浏览器宣布集成 IPFS 协议,它会取代 HTTP 吗?
  11. ./configure:command not found 解决方法
  12. 二十 二分搜索树的完整实现及其复杂度分析
  13. Java基础(七) 房屋出租系统
  14. SpringCloud 微服务视频教程
  15. Java垃圾回收的工作原理和最佳做法
  16. Rockchip平台cpu散热风扇随温度自动调速的配置方法
  17. 一个骨灰级塞班开发者的自白
  18. 交叉25码是什么条码
  19. 00-高通msm8953 Android驱动教程
  20. 计算机考试没考好检讨书免费,玩电脑检讨书精选范文

热门文章

  1. vue项目怎么上传到web服务器,vue项目如何通过脚本自动打包上传服务器
  2. 一度智信|拼多多优惠券怎么取消
  3. PostgreSQL+postgis入门及简单应用(dijkstra实现最短路径)
  4. Kylin(二)安装使用
  5. 实战:ingress-nginx 高级配置1-2022.1.5
  6. 通过VISA库实现GPIB通信
  7. DTU连接自建MQTT服务器
  8. 基于OpenVINO部署PaddlePadle-YOLOE模型—2.模型下载与转换
  9. qt窗体设置圆角后出现黑色的直角
  10. 解答:显示器能显示画面,但是一闪一闪是什么原因