位置: IT常识 - 正文

vue导入处理Excel表格详解(导入vue.js)

编辑:rootadmin
vue导入处理Excel表格详解 目录1. 前言2.vue导入Excel表格2.1 使用ElementUI中的upload组件2.2 使用input文件上传3. 总体代码与效果4. 总结1. 前言

推荐整理分享vue导入处理Excel表格详解(导入vue.js),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue 导入excel,导入vue.js,vue导入excel数据,vue导入功能,vue导入导出,vue实现excel导入导出,vue导入功能,vue导入excel到后端,内容如对您有帮助,希望把文章链接给更多的朋友!

  最近遇到前端导入并处理excel表格的情况,趁此机会刚好研究一下vue导入并处理excel数据;当然自己手撸一个工具没有那么多时间,本文只是借助现有的工具来做一下工具使用总结。

2.vue导入Excel表格vue导入处理Excel表格详解(导入vue.js)

  vue导入Excel表格主要有两种常用的方法,一个是借助ElementUI文件上传进行表格导入,另一个是自带的input做文件上传;以下对两个方法做详细介绍;

2.1 使用ElementUI中的upload组件安装ElementUI npm i element-ui -S安装Excel表格解析插件 npm i xlsx -S导入需要用的工具包import Vue from "vue";import ElementUI from "element-ui";import "element-ui/lib/theme-chalk/index.css";import { read, utils } from "xlsx"; // 注意处理方法引入方式Vue.use(ElementUI);引入组件<el-upload action="https://jsonplaceholder.typicode.com/posts/" :on-success="handleChange" :file-list="fileList" class="el-upload" >添加处理逻辑// 导入成功时执行handleChange(res, file, fileList) { // 将文件放入 for (let i = 0; i < fileList.length; i++) { if (file.name != fileList[i].name) { this.fileList.push({ name: file.name, url: "", uid: file.uid }); } } const files = { 0: file }; this.readExcel(files); }, readExcel(file) { const fileReader = new FileReader(); fileReader.onload = ev => { try { const data = ev.target.result; const workbook = read(data, { type: "binary" }); const params = []; // 取对应表生成json表格内容 workbook.SheetNames.forEach(item => { this.tableData.push(utils.sheet_to_json(workbook.Sheets[item])); }); // 该算法仅针对表头无合并的情况 if (this.tableData.length > 0) { // 获取excel中第一个表格数据tableData[0][0],并且将表头提取出来 for (const key in this.tableData[0][0]) { this.tableHead.push(key); } } // 重写数据 } catch (e) { console.log("error:" + e); return false; } }; fileReader.readAsBinaryString(file[0].raw); }

以上处理的数据我这边用组件展示在了页面上,效果如下图:

2.2 使用input文件上传安装Excel表格解析插件 npm i xlsx -S导入需要用的工具包import { read, utils } from "xlsx"; // 注意处理方法引入方式使用input<div class="flex-display"> <div class="left-box">文件上传(input):</div> <input type="file" v-on:change="onChange" class="file-ipt" /> </div>添加处理逻辑 基本与上面处理逻辑相同onChange(e) { const file = e.target.files[0]; const fileReader = new FileReader(); fileReader.onload = ev => { try { const data = ev.target.result; const workbook = read(data, { type: "binary" }); const params = []; // 取对应表生成json表格内容 workbook.SheetNames.forEach(item => { params.push({ name: item, dataList: utils.sheet_to_json(workbook.Sheets[item]) }); this.tableData.push(utils.sheet_to_json(workbook.Sheets[item])); }); // 该算法仅针对表头无合并的情况 if (this.tableData.length > 0) { // 获取excel中第一个表格数据tableData[0][0],并且将表头提取出来 for (const key in this.tableData[0][0]) { this.tableHead.push(key); } } return params; // 重写数据 } catch (e) { console.log("error:" + e); return false; } }; fileReader.readAsBinaryString(file); }3. 总体代码与效果

效果如下:

总的样式以及代码如下:

<template> <div> <div class="flex-display"> <div class="left-box">表格上传(ElementUI):</div> <el-upload action="https://jsonplaceholder.typicode.com/posts/" :on-success="handleChange" :file-list="fileList" class="el-upload" > <el-button size="small" type="primary" class="el-btn" >点击上传</el-button > <div slot="tip" class="el-upload-tip"> 只能上传xlsx文件,且不超过5MB </div> </el-upload> </div> <el-table v-if="tableHead.length" :data="tableData[0]" style="width: 100%"> <el-table-column v-for="(data, key) in tableHead" :prop="data" :label="data" :key="key" width="180" > </el-table-column> </el-table> <div class="flex-display"> <div class="left-box">文件上传(input):</div> <input type="file" v-on:change="onChange" class="file-ipt" /> </div> </div></template><script>import Vue from "vue";import ElementUI from "element-ui";import "element-ui/lib/theme-chalk/index.css";import { read, utils } from "xlsx";Vue.use(ElementUI);export default { data() { return { fileList: [], //上传文件列表 tableHead: [], //表头 tableData: [] // 表数据 }; }, methods: { onChange(e) { const file = e.target.files[0]; const fileReader = new FileReader(); fileReader.onload = ev => { try { const data = ev.target.result; const workbook = read(data, { type: "binary" }); const params = []; // 取对应表生成json表格内容 workbook.SheetNames.forEach(item => { params.push({ name: item, dataList: utils.sheet_to_json(workbook.Sheets[item]) }); this.tableData.push(utils.sheet_to_json(workbook.Sheets[item])); }); // 该算法仅针对表头无合并的情况 if (this.tableData.length > 0) { // 获取excel中第一个表格数据tableData[0][0],并且将表头提取出来 for (const key in this.tableData[0][0]) { this.tableHead.push(key); } } return params; // 重写数据 } catch (e) { console.log("error:" + e); return false; } }; fileReader.readAsBinaryString(file); }, handleChange(res, file, fileList) { // 将文件放入 for (let i = 0; i < fileList.length; i++) { if (file.name != fileList[i].name) { this.fileList.push({ name: file.name, url: "", uid: file.uid }); } } // this.fileList = fileList.slice(-3); const files = { 0: file }; this.readExcel(files); }, readExcel(file) { const fileReader = new FileReader(); fileReader.onload = ev => { try { const data = ev.target.result; const workbook = read(data, { type: "binary" }); const params = []; // 取对应表生成json表格内容 workbook.SheetNames.forEach(item => { params.push({ name: item, dataList: utils.sheet_to_json(workbook.Sheets[item]) }); this.tableData.push(utils.sheet_to_json(workbook.Sheets[item])); }); // 该算法仅针对表头无合并的情况 if (this.tableData.length > 0) { // 获取excel中第一个表格数据tableData[0][0],并且将表头提取出来 for (const key in this.tableData[0][0]) { this.tableHead.push(key); } } return params; // 重写数据 } catch (e) { console.log("error:" + e); return false; } }; fileReader.readAsBinaryString(file[0].raw); } }};</script><style lang="scss" scoped>.upload-demo { width: 100%;}.flex-display { margin: 50px 30px; width: 100%; display: flex; justify-content: flex-start; .left-box { margin: 20 30; height: 36px; line-height: 36px; }}.el-upload { margin-left: 40px; .el-btn { font-size: 16px; } .el-upload-tip { display: inline; font-size: 12px; }}.file-ipt { width: 200px; height: 36px; line-height: 36px; button { background-color: #409eff; }}input #file-upload-button { background-color: #409eff;}</style>4. 总结

  较为容易踩坑的点就是xlsx这个包的导入方式,这个包处理excel表格功能时相当强大的,除了导入与数据解析,还有导出为excel等功能,在我们日常网站开发中非常常用。其次容易踩坑的就是vue中事件的监听与处理方式,我们可以看到使用组件贺不使用组件区别还是比较大的,当然使用现有组件往往能获得更好的效果,所以这里还是推荐大家使用方法一去实现这个功能。

  最后本文仅对数据做简单处理,若要处理更为复杂的表格数据,就需要研究更强大的算法,不喜勿碰,谢谢。

本文链接地址:https://www.jiuchutong.com/zhishi/300855.html 转载请保留说明!

上一篇:【OpenFOAM】-olaFlow-算例1- baseWaveFlume(openfoam中文教程)

下一篇:React Hook - useEffecfa函数的使用细节详解

  • ipad怎么设置儿童模式限制应用(ipad怎么设置儿童空间)

    ipad怎么设置儿童模式限制应用(ipad怎么设置儿童空间)

  • 苹果13怎么自定义来电铃声(苹果13怎么自定义充电提示音)

    苹果13怎么自定义来电铃声(苹果13怎么自定义充电提示音)

  • 微信步数是一天更新一次吗(微信步数一天五万步正常吗)

    微信步数是一天更新一次吗(微信步数一天五万步正常吗)

  • 闲鱼玩家有流量扶持吗?(闲鱼玩家有流量么)

    闲鱼玩家有流量扶持吗?(闲鱼玩家有流量么)

  • 哈罗顺风车一次接4单可以吗(哈罗顺风车一次接2个单算几单)

    哈罗顺风车一次接4单可以吗(哈罗顺风车一次接2个单算几单)

  • iphone6plus怎么隐藏应用(iphone6plus怎么隐藏app)

    iphone6plus怎么隐藏应用(iphone6plus怎么隐藏app)

  • 双拼输入是什么意思(双拼输入是什么?)

    双拼输入是什么意思(双拼输入是什么?)

  • 高温wifi和低温wifi区别(高温wifi和低温wifi是什么意思)

    高温wifi和低温wifi区别(高温wifi和低温wifi是什么意思)

  • ipad可以连安卓手机热点吗(iPad可以连安卓蓝牙吗)

    ipad可以连安卓手机热点吗(iPad可以连安卓蓝牙吗)

  • wr886n无线桥接成功上不了网(wr886n无线桥接成功不能上网)

    wr886n无线桥接成功上不了网(wr886n无线桥接成功不能上网)

  • 微信语音会自动挂断吗(微信语音会自动拒绝吗)

    微信语音会自动挂断吗(微信语音会自动拒绝吗)

  • 蜂窝版watch美版中国能用吗(applewatch 美版蜂窝)

    蜂窝版watch美版中国能用吗(applewatch 美版蜂窝)

  • 苹果11pro怎么关机(苹果11pro怎么关闭旋转屏幕)

    苹果11pro怎么关机(苹果11pro怎么关闭旋转屏幕)

  • iphone11单手操作在哪里(苹果11单手操作不方便如何解决)

    iphone11单手操作在哪里(苹果11单手操作不方便如何解决)

  • airpods怎么改不了名字(airpods怎么设置)

    airpods怎么改不了名字(airpods怎么设置)

  • 怎样发原图照片到微信(怎样发原图照片到微信朋友圈)

    怎样发原图照片到微信(怎样发原图照片到微信朋友圈)

  • 华为荣耀9x充电多长时间(华为荣耀9x充电器多少瓦)

    华为荣耀9x充电多长时间(华为荣耀9x充电器多少瓦)

  • 小米手环4nfc支持城市有哪些(小米手环4NFC支持比亚迪解锁吗)

    小米手环4nfc支持城市有哪些(小米手环4NFC支持比亚迪解锁吗)

  • 探探购买会员支付失败(探探买会员是不是真的)

    探探购买会员支付失败(探探买会员是不是真的)

  • p30双景录像怎么设置(p30pro双景录像)

    p30双景录像怎么设置(p30pro双景录像)

  • 酷睿i5一共有几代(酷睿i5一共有几代处理器)

    酷睿i5一共有几代(酷睿i5一共有几代处理器)

  • 手机不听使唤屏幕乱按(手机不听使唤屏幕乱按修得多少钱)

    手机不听使唤屏幕乱按(手机不听使唤屏幕乱按修得多少钱)

  • 标准word文档格式规范(标准word文档格式规范字号)

    标准word文档格式规范(标准word文档格式规范字号)

  • CSS入门(css入门经典)

    CSS入门(css入门经典)

  • 异地预缴附加税需要计提吗
  • 延期申报后可否延期缴纳税款
  • 增值税应纳税额是要交的钱吗
  • 应纳税额与应纳税额差额
  • 消费卡预付卡能入账吗
  • 飞机票的快递费多少钱
  • 房屋过户收费标准
  • 行政单位收到行政事业性收费,需要上缴国库
  • 报销油费如何写摘要及会计分录怎么做?
  • 在建工程完工结转
  • 医院收到卫生局补助会计分录怎么写
  • 结转劳务费
  • 注册地在境外的公司需要纳税么
  • 预提费用入账依据
  • 电视机在开票中属于哪一类
  • 投资款印花税的税率是多少啊
  • 增值税进项税额是什么意思
  • 固定资产的摊销额计入什么科目
  • 运费发票没有开 怎么做到成本
  • 股票交易的印花税和手续费是多少
  • 进出口免抵退税操作
  • 公司开年会的费用谁承担
  • mac系统如何切换大小写
  • 民间非盈利组织会计要素组成
  • 企业开票附加税
  • bios中如何关闭cd/dvd
  • 如何激活windows10免费
  • 企业应纳所得税计算公式
  • php session_start
  • 长期股权投资的账面价值怎么计算
  • 克洛格森林大克洛格
  • yii框架教程
  • 超过500万需要补税吗
  • 以前年度损益调整
  • command对象可以执行sql语句吗
  • 其他权益工具投资公允价值变动怎么计算
  • 安全文明措施费比例
  • 保障金计入什么科目
  • 老板天天吸烟
  • Mysql中 show table status 获取表信息的方法
  • 总结一周内学习的Sql经验(一)
  • 股东分红账务处理表格
  • 小规模纳税人征收率5%的情况
  • 销售费用专票能抵扣吗
  • 公司注销时财务报表要注意什么
  • 高速过路费抵扣增值税
  • 一般纳税人农业企业免企业所得吗
  • 外币投资计入什么科目
  • 采购入库单如何弃审U8
  • 买二手设备需要签合同吗
  • 个体工商户纳税申抿
  • 研发收入超过研发成本
  • 记账凭证的分类标准
  • 我是海关企业员工英语
  • 电话费计入什么二级科目
  • SQL2005、SQL2008允许远程连接的配置说明(附配置图)
  • linux下mysql 5.7.16 免安装版本图文教程
  • 微软安全公告
  • win8鼠标右键没反应
  • win10系统锁屏后输入密码一直转圈进不去桌面
  • 影响电脑速度的因素
  • linux tracker
  • win8系统桌面图标怎么变小
  • linux中如何更改主机名
  • linux端口流量监控
  • win1021年更新
  • opengl sharder
  • pm2使用手册
  • python编程模拟
  • Unity3D事件函数的执行顺序
  • python中str的用法
  • 会用python
  • 安卓手机启用暴露通知
  • python3.6安装pil
  • python多进程多线程协程
  • android回调函数
  • 容积率大于0.5 房产原值怎样算
  • 12333热线时间
  • 车船发票什么样子
  • 三种人不交个人所得税?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设