需求如下:

前端拿到表格中的数据,对数据做以下判断,并将拿到的数据转换成以下json格式,传给后端。

具体实现:

  1. 下载npm包:npm install xlsx --save
  2. 在vue文件中引入依赖:import XLSX from "xlsx"
  3. 使用iviewui中的上传组件:
          <Upload class="row-mgr"
    :before-upload="handleUpload" accept=".xls" :show-upload-list="false"
    action="">
    <Button icon="ios-cloud-upload-outline">批量导入</Button>
    </Upload>
  4. js解析文件及对解析的数据进行处理:
        <script>
    import XLSX from "xlsx"
    export default {
    name: "deviceImport",
    props: ['deviceTypes'],
    data() {
    return {
    deviceTypesArry: []
    }
    },
    computed: {},
    methods: {
    // 获取excel第一行的内容获取表头
    getList1(wb){
    let wbData = wb.Sheets[wb.SheetNames[0]]; // 读取的excel单元格内容
    let re = /^[A-Z]1$/; // 匹配excel第一行的内容
    let arr1 = [];
    for (let key in wbData) { // excel第一行内容赋值给数组
    if (wbData.hasOwnProperty(key)) {
    if (re.test(key)) {
    arr1.push(wbData[key].w);
    }
    }
    }
    return arr1;
    },
    // 增加对应字段空白内容
    AddXlsxData(xlsxData, list1){
    let addData = null; // 空白字段替换值
    console.log(xlsxData)
    for (let i = 0; i < xlsxData.length; i++) { // 要被JSON的数组
    for (let j = 0; j < list1.length; j++) { // excel第一行内容
    if (!xlsxData[i][list1[j]]) {
    xlsxData[i][list1[j]] = addData;
    }
    }
    }
    return xlsxData;
    },
    handleUpload (file) {
    this.file = file;
    let fileend = file.name.substring(file.name.lastIndexOf("."))
    let isExcel = (fileend === '.xls' || file.type === 'application/vnd.ms-excel')
    if (!isExcel) {
    this.$Message.error('您只能上传.xls格式的文件!')
    return
    }
    const fileReader = new FileReader()
    fileReader.onload = (ev) => {
    try {
    const data = ev.target.result
    const workbook = XLSX.read(data, {
    type: 'binary' // 以字符编码的方式解析
    })
    const exlname = workbook.SheetNames[0] // 取第一张表
    let exl = XLSX.utils.sheet_to_json(workbook.Sheets[exlname]) // 生成json表格内容 const list1 = this.getList1(workbook);
    // debugger
    exl = this.AddXlsxData(exl, list1);
    const name_null = exl.filter(function (item) {
    if ((!item.name || item.name == '')||(!item.type || item.type == '')) {
    return item
    }
    })
    if(name_null.length!==0){
    this.$Message.error('name和type都不能为空,请检查表格内的数据')
    return
    }
    const _type = exl.filter((item) => {
    if (this.deviceTypesArry.indexOf(item.type) != -1) {
    return item
    }
    })
    //deviceTypes 判断表格中的 type必须包含在系统中的type(左上角下拉框)不能随便填
    if (_type.length !== exl.length) {
    this.$Message.error('type的值必须是包含在系统中的type,请检查表格内的数据')
    return
    }
    const jsonPrams = exl.map(item => {
    const obj = {
    name: item.name,
    type: item.type,
    label: item.label,
    token: item.token,
    additionalInfo: {
    gateway: item.gateway == true || item.gateway == 'TRUE' ? true : false,
    description: item.description
    }
    }
    return obj
    })
    console.log(jsonPrams)
    } catch (e) {
    console.log('出错了::')
    return false
    }
    }
    fileReader.readAsBinaryString(file)
    return isExcel;
    }, },
    mounted: function () {
    //先提取 deviceTypes中所有的type值
    this.deviceTypesArry = this.deviceTypes.map(item => {
    return item.type
    })
    }
    }
    </script>

    打印结果:

前端解析excel表格的更多相关文章

  1. 使用PHPExcel解析Excel表格

    安装类库 从GitHub上下载PHPExcel类库 地址:https://github.com/PHPOffice/PHPExcel 解压后将Classes文件夹移动到ThinkPHP的extend目 ...

  2. JXL解析Excel表格内容到数据库

    java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ...

  3. H5纯前端生成Excel表格

    H5纯前端生成Excel表格方法如下: <!DOCTYPE html> <html> <head> <title></title> < ...

  4. Java使用POI解析Excel表格

    概述 Excel表格是常用的数据存储工具,项目中经常会遇到导入Excel和导出Excel的功能. 常见的Excel格式有xls和xlsx.07版本以后主要以基于XML的压缩格式作为默认文件格式xlsx ...

  5. AngularJS之前端解析excel文件

    之前发现一款比较强大的js解析excel插件SheetJS js-xlsx,一直未投入到生产中使用.最近有批量导入的需求,大致看了下文档,使用比较方便快捷,容易上手,现在以AngularJS为例,介绍 ...

  6. java后台读取/解析 excel表格

    需求描述 前台需要上传excel表格,提交到后台,后台解析并返回给前台,展示在前台页面上! 前台部分代码与界面 <th style="padding: 7px 1px;width:15 ...

  7. vue 纯前端导出 excel 表格

    在开发后台管理系统的时候,很多地方都要用到导出excel 表格,比如将table中的数据导出到本地,那么实现这种需求往往有两种方案: 一.后端开发一个下载链接,前端将这个链接放到 a 标签的 href ...

  8. 前端导出excel表格

    前言近期项目有个新需求--将折线图表的数据加一个下载成excel表格的功能.以前下载功能都是调后台接口的,但是这个迭代,后台压力比较重,部分就交给了前端自己实现,下面就记录一下前端如何实现excel表 ...

  9. vue 利用xlsx、xlsx-style、file-saver实现前端导出excel表格 (包括设置单元格居中、边框等样式) antdesignvue、elementui、vxetable 等都适用

    我用的方法是在表格的根组件外层赋一个div用来导出整个表格,所以antdesignvue.elementui.vxetable 或者原生的table写法应该全都适用,此处我用的框架为antdesign ...

  10. php解析Excel表格并且导入MySQL数据库

    最近根据客户需求,需要增加一个导入Excel表格的功能,Excel中存放的是知识库中医知识的分类体系目录.是在thinkphp框架下编写的代码,用的是phpexcel第三方包.测试环境用的是xampp ...

随机推荐

  1. 【青少年CTF】Crypto-easy 题解小集合

    Crypto-easy 1.BASE 拿到附件用cyberchef自动解码得到flag 2.basic-crypto 拿到附件发现是一串01的数字,这时候想到二进制转换 然后base64在线解码 接着 ...

  2. 开源.NetCore通用工具库Xmtool使用连载 - XML操作篇

    [Github源码] <上一篇> 介绍了Xmtool工具库中的发送短信类库,今天我们继续为大家介绍其中的XML操作类库. XML操作是软件开发过程中经常会遇到的情况:包括XML内容的遍历解 ...

  3. OpenSSH版本升级漏洞修复问题

    Hi, I'm @Merbelue 大家好,这篇为大家介绍二进制方式对OpenSSH版本升级,在生产环境中可用于解决版本升级.漏洞修复等. @ 目录 1.环境 2.安装telnet 2.1.检查是否安 ...

  4. .NET Core WebAPI 基础 文件上传

    昨天分享了一个在WebApi中如何接收参数的文章 .NET API 中的 FromRoute.FromQuery.FromBody 用法 - 一事冇诚 - 博客园 (cnblogs.com),然后有新 ...

  5. WPF学习 - 用鼠标移动、缩放、旋转图片(2)- 使用MatrixTransform

    在上一篇文章中,提到了以鼠标控制变换图片的方法. 这种方法在某种情况下可以,例如,直接在windows窗体上.但我发现,当把它封装到一个控件中的时候,它就不行了. 经过不断的尝试,我找到了一种更简单的 ...

  6. Java下载多个网络文件并打成压缩包

    需求:浏览器访问后台的http地址后,后台将多个网络文件打成压缩包返回给浏览器,用户可以通过浏览器直接下载压缩包. 实现: 根据文件链接把文件下载下来并且转成字节码  ,代码: package com ...

  7. 记一次 Redisson 线上问题 → ERR unknown command 'WAIT' 的排查与分析

    开心一刻 昨晚和一个朋友聊天 我:处对象吗,咱俩试试? 朋友:我有对象 我:我不信,有对象不公开? 朋友:不好公开,我当的小三 问题背景 程序在生产环境稳定的跑着 直到有一天,公司执行组件漏洞扫描,有 ...

  8. HTML一键打包APK工具最新版1.9.1更新(附下载地址)

    HMTL网址打包APK,可以把本地HTML项目, Egret游戏,网页游戏,或者网站打包为一个安卓应用APK文件,无需编写任何代码,也无需配置安卓开发环境,支持在最新的安卓设备上安装运行. HTML一 ...

  9. Mysql高级11-后台进程

    一.前言 MySQL的服务实现通过后台多个线程.内存池.文件交互来实现对外服务的,不同线程实现不同的资源操作,各个线程相互协助,共同来完成数据库的服务.MySQL常用的后台线程概括如下,分为Maste ...

  10. 「Tricks」整体DP

    不太了解这个东西的具体定义是什么,总之应该是一个用数据结构维护 DP 状态的某几个维度的 trick 吧. 事实上你可以把这篇 post 理解为三个题的解集. 先直接来看 noi2020 - Dest ...