位置: 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函数的使用细节详解

  • 一个手机号可以注册2个微信吗(一个手机号可以注册几个微博)

    一个手机号可以注册2个微信吗(一个手机号可以注册几个微博)

  • 手机怎么修改微博名字(手机怎么修改微信文档内容)

    手机怎么修改微博名字(手机怎么修改微信文档内容)

  • i76700hq属于高端cpu吗(i7-6700hq什么级别)

    i76700hq属于高端cpu吗(i7-6700hq什么级别)

  • alert有什么用途(alert?)

    alert有什么用途(alert?)

  • sd卡格式化后还能恢复吗(sd卡格式化后还能恢复吗手机)

    sd卡格式化后还能恢复吗(sd卡格式化后还能恢复吗手机)

  • 电脑的下面一栏点不了是为什么(电脑的下面一栏不见了)

    电脑的下面一栏点不了是为什么(电脑的下面一栏不见了)

  • 电脑网线接路由器还是光猫(电脑网线接路由器好还是光纤猫)

    电脑网线接路由器还是光猫(电脑网线接路由器好还是光纤猫)

  • 苹果有背光无显示黑屏(苹果有背光无显示属于质量问题吗)

    苹果有背光无显示黑屏(苹果有背光无显示属于质量问题吗)

  • 为什么苹果xr没有导入通讯录(为什么苹果xr没有心动模式)

    为什么苹果xr没有导入通讯录(为什么苹果xr没有心动模式)

  • 华为灭屏显示要不要开(华为灭屏显示耗电吗)

    华为灭屏显示要不要开(华为灭屏显示耗电吗)

  • 小红书删除的笔记能恢复吗(小红书删除的笔记怎么找回来)

    小红书删除的笔记能恢复吗(小红书删除的笔记怎么找回来)

  • 苹果手机刷朋友圈卡顿怎么回事(苹果手机刷朋友圈时下面变黑一下)

    苹果手机刷朋友圈卡顿怎么回事(苹果手机刷朋友圈时下面变黑一下)

  • 电脑开网页慢什么原因(电脑打开网页很慢是怎么回事)

    电脑开网页慢什么原因(电脑打开网页很慢是怎么回事)

  • 鼠标左侧两个键有什么用(鼠标左侧两个键是宏吗)

    鼠标左侧两个键有什么用(鼠标左侧两个键是宏吗)

  • 喜马拉雅获取声音资源出错怎么回事(喜马拉雅怎么听音识曲)

    喜马拉雅获取声音资源出错怎么回事(喜马拉雅怎么听音识曲)

  • 抖音作品能全部私密吗(抖音作品能全部删除吗)

    抖音作品能全部私密吗(抖音作品能全部删除吗)

  • 苹果打电话听筒声音小解决方法(苹果打电话听筒没声音微信听语音又可以了)

    苹果打电话听筒声音小解决方法(苹果打电话听筒没声音微信听语音又可以了)

  • 苹果11的卡槽在哪里(苹果11卡槽在哪里可找到)

    苹果11的卡槽在哪里(苹果11卡槽在哪里可找到)

  • 铁三角耳机是哪国品牌(铁三角耳机是哪个国家的牌子)

    铁三角耳机是哪国品牌(铁三角耳机是哪个国家的牌子)

  • wps字体如何无限加粗(wps字体如何无限放大)

    wps字体如何无限加粗(wps字体如何无限放大)

  • 苹果6.1.3系统怎么装微信(苹果6.1.3系统怎么装软件)

    苹果6.1.3系统怎么装微信(苹果6.1.3系统怎么装软件)

  • 步步高家教机有什么功能(步步高家教机有定位功能吗)

    步步高家教机有什么功能(步步高家教机有定位功能吗)

  • 双删除线在哪里找(双删除线什么样子)

    双删除线在哪里找(双删除线什么样子)

  • 8p和8有啥区别(8p跟8)

    8p和8有啥区别(8p跟8)

  • CLIP论文详解(ldpc论文)

    CLIP论文详解(ldpc论文)

  • Effective C++学习笔记(2)(effective c++ github)

    Effective C++学习笔记(2)(effective c++ github)

  • 收取商标权使用费分录
  • 结转结余属于什么科目
  • 小规模教育培训计划
  • 公司油票怎么抵扣
  • 契税印花税的会计分录怎么写
  • 小规模纳税人个税申报时间
  • 公司与公司之间合作协议
  • 收到知识产权专用发票
  • 期末留抵税额大于销项税额本月还需要计提吗
  • 员工借备用金怎么写摘要
  • 预付设备款如何缴纳印花税
  • 增值税发票价格低于进项
  • 买二手面包注意事项
  • 预缴税款个人所得税如何计算
  • 用于职工集体福利的外购货物可以抵进项税额吗
  • 平销返利可以作为下期的折扣开票吗?
  • 维修设备领用材料会计分录怎么写
  • 给客户打折账务处理
  • 资产处置损失减少的原因
  • 长期待摊费用的内容和特征
  • 运输公司租赁车辆怎么做账
  • windows11怎么设置壁纸
  • 广告公司车身广告
  • 出口退税是怎么退
  • Win10 Build 21354 太阳谷ISO镜像版体验报告 含下载地址
  • 临时工工资应该找人力资源要吗
  • 劳务报酬必须要和工资申报吗
  • 电脑方案表格
  • 广告制作公司成本核算包含哪些
  • 差额征收增值税 取得的进项可否抵扣
  • 哪些货物可以享受减免税政策
  • 改征增值税是什么意思
  • 未开票收入本月未收款的分录
  • 增值税发票支票号
  • 应付职工薪酬是负数是什么意思
  • 已用短信息服务发送信息,对方能收到吗
  • vue项目使用rem
  • 银行同业存放业务管理办法
  • python获取值对应的键
  • 只有进项税没有销项税如何报税
  • 办理税控盘
  • SQL SERVER 2008 64位系统无法导入ACCESS/EXCEL怎么办
  • 工伤住院期间用人单位如何补偿
  • 鲜花虫草开发票属于什么类别?
  • sql server数据库异地备份
  • 生产企业成本核算案例
  • 长租公寓如何纳税
  • 公益性捐赠支出计入什么科目
  • 公司分期付款买车怎么抵税
  • 增值税开票系统怎么改开票人名字信息
  • 按照管理会计的解释,成本的相关性是
  • 客人在酒店
  • 价外费用计入哪个科目
  • 开餐饮店需要什么条件才能开
  • 企业建账涉及哪些内容
  • 私营企业会计退休年龄50还是55
  • windrv.exe
  • windowsupdate.diagcab
  • win7系统运行慢,如何提速
  • win10服务出现了问题
  • 基于嵌入式linux的课程设计
  • linux cat命令的用法
  • 炉石传说代码怎么导入
  • nodejs可以直接操作数据库
  • c#在unity的作用
  • web页面展示
  • node.js wss
  • js怎么使用
  • nodejs来一打c++扩展
  • javascript教程
  • jquery遍历元素并赋值
  • csgo视角指令锁定枪械摇晃
  • JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
  • python类怎么用
  • listview报错
  • 江苏税务社保缴纳查询缴费记录
  • 税务上成品油换算
  • 不予税务行政许可
  • 税务局打印申报表
  • 城镇土地使用税减免税政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设