超简单的excel表导入成Json数据方法--VUE项目(xlsx.js)_excel导入json数据-程序员宅基地

技术标签: vue  elementui  json  vue.js  javascript  

效果图

1、前端样式

2、上传成功后提示

 3、上传的excel实例表

 4、返回的Json数据

5、我修改成我的post接口参数格式 

 

 6、我的post接口返回的结果

 步骤

第一步,导入xlsx.js依赖,打开终端,执行一下操作

cnpm install xlsx --s

 第二步,在vue文件中添加以下代码就可以使用xlsx.js了

import xlsx form 'xlsx'

第三步,详细代码(我做成一个子组件,除了接口json数据参数需要,根据你自己实际情况修改外,可以直接复制粘贴使用,代码都有注释

<template>
  <el-upload action=""
             multiple :show-file-list="false"
             style="display: contents"
             accept=".xls,.XLS,.xlsx,.XLSX"
             :limit="3"
             :http-request="httpRequest">
    <el-button type="primary" icon="el-icon-upload2">导入</el-button>
  </el-upload>
</template>

<script>
import xlsx from 'xlsx'
import moment from 'moment/moment'
export default {
  name: 'test5',
  data () {
    return {
      jsondata: [], // 导入后转换成json
      numbersuccess: 0, // 导入成功数
      numberusered: 0, // 已存在数
      resdata: []// 导入post请求返回的值
    }
  },
  methods: {
    httpRequest (e) {
      let file = e.file // 文件信息
      // 错误情况判断
      if (!file) {
        return false
      } else if (!/\.(xls|xlsx)$/.test(file.name.toLowerCase())) {
        this.$message.error('上传格式不正确,请上传xls或者xlsx格式')
        return false
      }
      const fileReader = new FileReader()// 读取文件
      fileReader.onload = (ev) => {
        try {
          const data = ev.target.result// 获取结果
          // 获取所有表的信息
          const workbook = xlsx.read(data, {
            type: 'binary', // 以字符编码的方式解析
            cellDates: true// 将excel中日期类型数据,转化为标准日期格式,而不是默认的数字格式
          })
          // 获取第一张表的表名
          const exlname = workbook.SheetNames[0]
          // 转换成json数据
          const exl = xlsx.utils.sheet_to_json(workbook.Sheets[exlname]) // 生成json表格内容
          // 打印 ws 就可以看到读取出的表格数据
          console.log(exl)
          // 数据处理
          this.submit_from(exl)
        } catch (e) {
          console.log('error')
          return false
        }
      }
      fileReader.readAsBinaryString(file)
    },
    // 数据处理成需要的格式
    submit_from (data) {
      // 遍历处理数据(根据你自己实际情况修改内容)
      data.forEach((item) => {
        let obj = {}
        for (let i = 0; i <= data.length; i++) {
          obj.id = item.账号
          obj.name = item.用户名
          obj.address = item.地址
          obj.job = item.职业
          obj.status = item.账号状态 === '启用' ? 'true' : 'false'
          obj.birthday = moment(item.生日).format('YYYY-MM-DD')
        }
        // 赋值给参数jsondata
        this.jsondata.push(obj)
      })
      console.log(this.jsondata)
      // 遍历post请求添加数据到mysql(换成你自己的post接口)
      this.jsondata.forEach((item) => {
        this.$api.addgameuser(item.id, item.name, item.job, item.birthday, item.address, item.status, '')
          .then((res) => {
            this.resdata.push(res.data)// 返回添加结果
          })
          .catch((err) => {
            console.log(err)
          })
      })
      // 输出post请求结果
      console.log(this.resdata)
      // 提示添加成功数据的数量(延时处理)
      setTimeout(() => {
        // 对返回的结果做判断(我的接口返回true或者'exist_user',根据你自己实际情况配置)
        for (var i = 0; i < this.resdata.length; i++) {
          if (this.resdata[i] === true) {
            this.numbersuccess = this.numbersuccess + 1// 成功数
          } else if (this.resdata[i] === 'exist_user') {
            this.numberusered = this.numberusered + 1// 已存在用户数
          }
        }
        this.$alert('添加总数:' + this.jsondata.length + '------成功数:' + this.numbersuccess + '(其中' + this.numberusered + '名用户已存在,无需添加!)',
          '上传结果',
          {
            confirmButtonText: '确定'
          })
        this.cleanresdata() // 初始化上传结果数据
        // 如果有成功上传,刷新路由页面
        if (this.numbersuccess > 0) {
          this.$router.replace('/test3')
        }
      }, 1500)
    },
    // 初始化上传结果数据
    cleanresdata () {
      // eslint-disable-next-line no-unused-expressions,no-sequences
      this.jsondata = [], // 导入后转换成json
      this.numbersuccess = 0, // 导入成功数
      this.numberusered = 0, // 已存在数
      this.resdata = []
    }

  }
}
</script>

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42966151/article/details/128351631

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文