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

  • 京东上门取件怎么修改地址(京东上门取件怎么下单)

    京东上门取件怎么修改地址(京东上门取件怎么下单)

  • 小米锁屏快捷键怎么做(小米锁屏快捷键设置)

    小米锁屏快捷键怎么做(小米锁屏快捷键设置)

  • 荣耀v30pro屏幕多大(荣耀v30pro屏幕多大尺寸)

    荣耀v30pro屏幕多大(荣耀v30pro屏幕多大尺寸)

  • 刚注册微信就限制登录(新注册微信限制)

    刚注册微信就限制登录(新注册微信限制)

  • 微信朋友圈内容不能全部显示出来(微信朋友圈内容怎么删除掉)

    微信朋友圈内容不能全部显示出来(微信朋友圈内容怎么删除掉)

  • 华为手机隐私空间占内存吗(华为手机隐私空间密码忘了怎么办)

    华为手机隐私空间占内存吗(华为手机隐私空间密码忘了怎么办)

  • qq屏蔽的群聊怎么找回(qq屏蔽群聊怎么解除屏蔽)

    qq屏蔽的群聊怎么找回(qq屏蔽群聊怎么解除屏蔽)

  • 腾达ac6是千兆路由器吗(腾达ac7是千兆端口吗)

    腾达ac6是千兆路由器吗(腾达ac7是千兆端口吗)

  • 香港手机号注册微信好处(香港手机号注册微信)

    香港手机号注册微信好处(香港手机号注册微信)

  • 苹果手机右上角有一个像电脑一样的东西(苹果手机右上角下滑怎么设置)

    苹果手机右上角有一个像电脑一样的东西(苹果手机右上角下滑怎么设置)

  • qq空间标签发了不显示(qq空间标签发了别人为什么看不到)

    qq空间标签发了不显示(qq空间标签发了别人为什么看不到)

  • tplink网线插哪个口(tp-link网线怎么连接)

    tplink网线插哪个口(tp-link网线怎么连接)

  • 老快手号之前有违规还能再上热门吗?(以前用快手号账号不存在怎么办)

    老快手号之前有违规还能再上热门吗?(以前用快手号账号不存在怎么办)

  • 华为p40有几个摄像头(华为p40p摄像头几个)

    华为p40有几个摄像头(华为p40p摄像头几个)

  • qq可以几个人视频通话(qq最多可以几个人视频聊天)

    qq可以几个人视频通话(qq最多可以几个人视频聊天)

  • 乐视手机怎么开启悬浮窗(乐视手机怎么开后壳)

    乐视手机怎么开启悬浮窗(乐视手机怎么开后壳)

  • 手机怎么提取文字(手机怎么提取文件)

    手机怎么提取文字(手机怎么提取文件)

  • 华为路由A2有几根天线(华为无线路由器a2怎么样)

    华为路由A2有几根天线(华为无线路由器a2怎么样)

  • 苹果广角镜头怎么打开(苹果广角镜头怎么关)

    苹果广角镜头怎么打开(苹果广角镜头怎么关)

  • 苹果快手直播伴侣怎么下载(苹果快手直播伴侣悬浮窗)

    苹果快手直播伴侣怎么下载(苹果快手直播伴侣悬浮窗)

  • 苹果5ge什么意思(苹果5g是)

    苹果5ge什么意思(苹果5g是)

  • cad怎么快速延伸(cad怎么快速延伸线)

    cad怎么快速延伸(cad怎么快速延伸线)

  • qq加了自己怎么删掉(qq加了好友怎么聊天)

    qq加了自己怎么删掉(qq加了好友怎么聊天)

  • wps的查找在哪里(wps2019查找在哪里)

    wps的查找在哪里(wps2019查找在哪里)

  • 苹果电池健康正常多少(苹果电池健康正常消耗)

    苹果电池健康正常多少(苹果电池健康正常消耗)

  • 怎么更改deepin20系统主题? deepin20终端主题设置方法(怎么更改定位位置信息)

    怎么更改deepin20系统主题? deepin20终端主题设置方法(怎么更改定位位置信息)

  • Yosemite使用技巧  如何使用Yosemite mac信息功能共享电脑屏幕教程

    Yosemite使用技巧 如何使用Yosemite mac信息功能共享电脑屏幕教程

  • Redis主从复制(redis主从复制如何保证不丢失数据)

    Redis主从复制(redis主从复制如何保证不丢失数据)

  • 车辆保险的车船税怎么算
  • 专门借款资本化时点
  • 经营性项目应收减少额怎么算
  • 代办汽车过户手续
  • 计提车间折旧费怎么写分录
  • 发票开错了收入增多了当月分录如何红冲?
  • 固定资产可以一次抵扣吗
  • 上个月少计了成本要怎么办
  • 所得税季报中的利润总额包括哪些
  • 应交所得税的计算例题
  • 企业所得税税率2023年最新税率表
  • 公司自持物业所承担的土地出让金是否可以抵扣呢?
  • 研发支出资本化支出在报表哪里
  • 工程款主营业务成本
  • 房产报废手续
  • 管理不善存货损失 企业所得税
  • 委托出口业务的账务如何处理呢?
  • 增值税纳税申报表怎么填
  • 无法收回的账务处理
  • 宿舍开店能开些啥
  • linux |bc
  • 事业单位财务预算管理制度
  • php unit
  • windows没有搜索
  • php自学
  • 电脑默认网关不可以用
  • replace.exe进程
  • win10设置待机时间长怎么在哪里设置
  • php最好的编程语言
  • 餐费发票怎么做账务处理
  • 价值高的备件算固定资产吗
  • 未注册未认证
  • svg symbol
  • php clob
  • 如何理解符合立案标准的,行政机关应当及时立案
  • 现金流量表哪些数据和资产负债表一致
  • 出租的厂房折旧记哪里
  • 车间购买办公用品
  • 应收帐款出售给银行会计分录
  • 安装配置mysql,检验是否正常安装
  • 矿产资源补偿费属于管理费用吗
  • 房产税在企业所得税扣除内吗
  • 递延所得税怎么计算
  • 理财产品的分类
  • 公户的结算卡是否可以转账
  • 小公司财务做内账流程
  • 分期付款服务费是什么
  • 发票加上税额之后怎么还多了呢
  • 股东权益和债权人
  • 起征点与免征额的联系
  • 收到海关进口关税怎么办
  • 收到货款确认收入还是开好发票确认收入
  • 项目前期的研发费用
  • 应付给股东的利润是什么科目
  • 项目所在地个税网上怎么报
  • 公司向股东个人借款
  • 销售收入确认后怎么处理
  • 公司账户转个人往来款
  • 什么叫自主研发
  • linux虚拟机基本操作
  • xp系统的存储在哪里
  • xp默认详细信息
  • mac自动排序
  • 1sass.exe是什么程序
  • win7开始菜单找不到启动项
  • liunx改时间命令
  • cocos2dx入门
  • unity3d 帧同步
  • jquery源码是什么水平
  • android 蓝牙 驱动 适配 sdio rk
  • 苹果多点触控
  • jQuery webuploader分片上传大文件
  • jquery里的ready是什么意思
  • linux 服务器重启
  • nodejs mysql orm
  • node.js介绍
  • python数据连接
  • unity保存项目
  • 个人所得税父母双方专项扣除
  • 武汉市国税局局长黄英简历
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设