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

  • excel如何制作折线图表(excel如何做折叠)

    excel如何制作折线图表(excel如何做折叠)

  • 钉钉办公软件能定位吗(用钉钉办公)

    钉钉办公软件能定位吗(用钉钉办公)

  • 微信群不显示自己的昵称(微信群不显示自己名字怎么设置)

    微信群不显示自己的昵称(微信群不显示自己名字怎么设置)

  • 戴尔电脑保修是几年(戴尔电脑保修是从激活开始吗)

    戴尔电脑保修是几年(戴尔电脑保修是从激活开始吗)

  • qq怎么看对方有没有拉黑你(qq怎么看对方有没有删除你)

    qq怎么看对方有没有拉黑你(qq怎么看对方有没有删除你)

  • 快手设置里怎么没有钱包(快手设置里怎么没有大屏模式)

    快手设置里怎么没有钱包(快手设置里怎么没有大屏模式)

  • 华为nova7怎么设置时间(华为nova7怎么设置不熄灭屏幕)

    华为nova7怎么设置时间(华为nova7怎么设置不熄灭屏幕)

  • 华为nova5pro声音小怎么解决(华为nova5pro声音有杂音怎么弄)

    华为nova5pro声音小怎么解决(华为nova5pro声音有杂音怎么弄)

  • 腾讯会议怎么关自己麦(腾讯会议怎么关闭摄像头)

    腾讯会议怎么关自己麦(腾讯会议怎么关闭摄像头)

  • 该网站服务器出错了是什么意思(网站服务器出错了是怎么回事)

    该网站服务器出错了是什么意思(网站服务器出错了是怎么回事)

  • 连信的手机号咋解绑呢(连信手机号码没用了怎么登陆)

    连信的手机号咋解绑呢(连信手机号码没用了怎么登陆)

  • 小米8有没有来电秀(小米有没有来电视频)

    小米8有没有来电秀(小米有没有来电视频)

  • 拼多多的免拼卡哪里看(拼多多的免拼卡在哪里领)

    拼多多的免拼卡哪里看(拼多多的免拼卡在哪里领)

  • 小米cc9支不支持防水(小米cc9支不支持电信卡)

    小米cc9支不支持防水(小米cc9支不支持电信卡)

  • 苹果11会用高通芯片吗(2020年苹果11用高通基带吗)

    苹果11会用高通芯片吗(2020年苹果11用高通基带吗)

  • 济南5g什么时候出来(济南5g基站什么时候覆盖)

    济南5g什么时候出来(济南5g基站什么时候覆盖)

  • 有微信号怎么查抖音号(有微信号怎么查绑定的手机号)

    有微信号怎么查抖音号(有微信号怎么查绑定的手机号)

  • 怎么取手机卡(华为怎么取手机卡)

    怎么取手机卡(华为怎么取手机卡)

  • oppoa3有没有红外线功能(oppoa3手机带红外线么)

    oppoa3有没有红外线功能(oppoa3手机带红外线么)

  • 毕业论文摘要如何生成目录(毕业论文摘要模版)

    毕业论文摘要如何生成目录(毕业论文摘要模版)

  • 苹果设备管理在哪(苹果设备管理在哪里找消失了)

    苹果设备管理在哪(苹果设备管理在哪里找消失了)

  • ios13测试版怎么更新(ios13.4测试版)

    ios13测试版怎么更新(ios13.4测试版)

  • 【ZED】从零开始使用ZED相机(二):打开相机+捕获图像(从 零开始)

    【ZED】从零开始使用ZED相机(二):打开相机+捕获图像(从 零开始)

  • vue虚拟dom和diff算法(vue虚拟domdiff算法)

    vue虚拟dom和diff算法(vue虚拟domdiff算法)

  • 购销合同印花税按70%
  • 劳务外包人员在本公司可报销吗
  • 差额发票和全额发票一样吗
  • 金税四期的主要功能
  • 主营业务收入体现在资产负债表哪里
  • 个税申报缴费
  • 子公司分红款没收到,宣告分红可以免税吗
  • 可转换债券含义
  • 51电子发票客户端后使用教程
  • 税务局代开的劳务费发票可以入账吗
  • 修理固定资产取得增值税发票能否抵扣?
  • 银行汇票分几种
  • 房屋租赁费属于什么会计分录
  • 无形资产原值变动账务处理
  • 增值税发票过期未认证怎么办
  • 公司一次性缴纳全年社保
  • 个税退税手续费税率
  • 小规模需要交所得税吗
  • 税局代开专票作废怎么做账
  • 500人的公司财务部几人
  • 工业投资额是指什么
  • 固定资产发现入账错误折旧如何处理?
  • 以土地入股房开什么发票
  • win7提示windows进行了未授权的更改
  • 车辆交通罚款怎样避免重复报销
  • 销售合同怎么计算印花税
  • 怎么登明细分类账
  • php 设计模式
  • 肚子胀气怎么办 4个方法快速排气很轻松
  • php最好的编程语言
  • electron 打包
  • 税务变更登记需要带的资料有哪些
  • flex布局教程实例篇
  • 包装费 增值税
  • HTTP加密/HTTPS工作过程
  • 已入账的发票跨年退回税务
  • 用现金报销差旅费及增值税怎么做账
  • 新建厂房如何计提折旧费用
  • 外国人在我国境内被刑事拘留
  • 对公账户的种类有几种
  • 银行存款利息的会计科目
  • 首涂第二十一套模板
  • cookie 会话
  • python 逻辑取反
  • mysql存储过程语句
  • 增值税普票税额可以抵扣税吗
  • 计提所得税后再结转本年利润吗
  • 客户多付的货款 不用退回 进营业外收入吗
  • 代建制取费标准
  • 未开票的收入怎么申报增值税
  • 收了对方预付款怎么打条
  • 销售费用可以提现吗
  • 国税退回多缴税款
  • 收到劳务费
  • 五证合一的办理流程是什么
  • sql server数据表
  • vmware虚拟机不能识别iso
  • WinXP系统建立VPN连接虚拟专用网络连接的途径
  • xp系统屏幕倒过来了怎么恢复
  • xp系统的本地连接在哪里打开
  • linux igb
  • win7怎么打开u盘里的的另一个U盘
  • liunx改时间命令
  • win7显示桌面的组合键
  • perl中splice
  • 学习的引子
  • sublime text配置node.js调试(图文教程)
  • unity签名
  • python3 pygame
  • jquery和dom对象之间怎么转换
  • 安卓手机管家
  • python中csv怎么用
  • jquery defaultvalue
  • jquery生成元素
  • jquery数据类型
  • javascript函数大全
  • 在androidstudio中,如何改变图片的位置
  • 医保可以直接到税局买吗?
  • 内蒙古国家税务总局电子税务局官网
  • 省税务局属于什么级别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设