Vue实现导入Excel功能步骤详解


Posted in Vue.js onJuly 03, 2021

1.前端主导实现步骤

第一步,点击页面上的导入按钮,读入Excel文件

利用插件完成。

第二步,按照后端的要求对数据格式加工,转成他们需要的格式

需要自己写逻辑。

第三步,通过后端接口,将数据通过ajax发回去

调接口,常规操作。

简而言之:前端读excel文件,修改文件格式,调接口

2.实现读入Excel文件

注:此步骤就可实现前端导入功能。如对修改格式有兴趣,可以继续看第三步。

概括:复制代码到自己的文件夹下,下载必需的插件。

2.1 使用的是elementUI提供的vue-admin-element中的上传方法(百度仓库克隆方式,官网也有)

2.2 下载包   npm install xlsx -S  (默认现在已经完成2.1步骤了)

2.3 引入UploadExcel组件并注册为全局(去找UploadExcel这个文件,复制一下,封装组件不必多说 )

不会注册全局组件参考下面代码:(你乐意在main.js里头搞也行,这里我就按可维护性高搞)

import PageTools from './PageTools'
import UploadExcel from './UploadExcel'
 
export default {
  // 插件的初始化, 插件给你提供的全局的功能, 都可以在这里配置
  install(Vue) {
    // 进行组件的全局注册
    Vue.component('PageTools', PageTools) // 注册工具栏组件
    Vue.component('UploadExcel', UploadExcel) // 注册导入excel组件
  }
}

 2.4 引入组件,使用组件,配置路由,设置点击回调函数(不必多说)

2.5 测试效果

浏览器手动输入你设置的路由地址,页面跳转过去

Vue实现导入Excel功能步骤详解


 小结:1.最重要的就是去复制,然后下载必要插件

            2.引入UploadExcel组件(作用是导入Excel文件)是必须的,但是注册全局不是必须的,看心情

            3. 导入组件,给他注册回调函数,他里面的两个参数是必须的,可以参考人家源代码,更易理解

            4.excel导入插件本质:把excel经过分析转换成js能够识别的常规数据,拿到数据我们可以进行任何操作

3.对数据进行加工 

注:此步骤其实考验的是对JavaScript的运用,可惜这个对我没难度,相信很久之后也是。

3.1 后端要求的格式:

Vue实现导入Excel功能步骤详解

3.2 我们要处理的内容:

  • 字段中文转英文。excel中读入的是姓名,而后端需要的是username
  • 日期处理。从excel中读入的时间是一个number值,而后端需要的是标准日期。

3.3 单独封装一个处理函数:

/**
     * results excel表格的内容
      //        [ {'姓名':'小张', '手机号': '13712345678'}, {.....} ]
      // 目标
      //        [ {'username':'小张', 'mobile': '13712345678'}, {.....} ]
     */
    transExcel(results) {
      const userRelations = {
        '入职日期': 'timeOfEntry',
        '手机号': 'mobile',
        '姓名': 'username',
        '转正日期': 'correctionTime',
        '工号': 'workNumber',
        '部门': 'departmentName',
        '聘用形式': 'formOfEmployment'
      }
      return results.map(item => {
        const obj = {}
        // 1. 取出这个对象所有的属性名: ['姓名', ‘手机号']
        // 2. 遍历这个数组,通过 中文名去 userRelations 找对应英文名, 保存值
        const zhKeys = Object.keys(item)
        zhKeys.forEach(zhKey => {
          const enKey = userRelations[zhKey]
          // 如果是时间格式,就要做转换
          if (enKey === 'correctionTime' || enKey === 'timeOfEntry') {
            obj[enKey] = new Date(formatExcelDate(item[zhKey]))
          } else {
            obj[enKey] = item[zhKey]
          }
        })
 
        return obj
      })
    }
 
handleSuccess({ results, header }) {
    
  console.log('从当前excel文件中读出的内容是', results)
  // results: [{入职日期: 44502, 姓名:xxxx}]
  // 目标:
  // results: [{timeOfEntry: 44502, username:xxxx}]
  // 处理从excel中读入的格式
  const arr = this.transExcel(results)
  console.log('转换之后的格式是', arr)
})

3.4 日期处理函数:

// 把excel文件中的日期格式的内容转回成标准时间
// https://blog.csdn.net/qq_15054679/article/details/107712966
export function formatExcelDate(numb, format = '/') {
  const time = new Date((numb - 25567) * 24 * 3600000 - 5 * 60 * 1000 - 43 * 1000 - 24 * 3600000 - 8 * 3600000)
  time.setYear(time.getFullYear())
  const year = time.getFullYear() + ''
  const month = time.getMonth() + 1 + ''
  const date = time.getDate() + ''
  if (format && format.length === 1) {
    return year + format + month + format + date
  }
  return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
}

4.调接口,发请求,在页面中使用

import { importEmployee } from '@/api/employees'
export default {
  name: 'Import',
  methods: {
    async handleSuccess({ results, header }) {
      try {
        console.log('从当前excel文件中读出的内容是', results)
        // results: [{入职日期: 44502, 姓名:xxxx}]
        // 目标:
        // results: [{timeOfEntry: 44502, username:xxxx}]
        const arr = this.transExcel(results)
        console.log('转换之后的格式是', arr)
        // 调用上传的接口,
        const rs = await importEmployee(arr)
        console.log('调用上传的接口', rs)
        // 上传成功之后,回去刚才的页面
        this.$router.back()
        this.$message.success('操作成功')
      } catch (err) {
        this.$message.error(err.message)
      }
    }
}

5 总结: 

导入的功能和导出差不多,难点在于转换数据格式,本篇文章没有过多介绍,但在另一篇导出文章中详细说明了,有兴趣的可以去看看    点我跳转至导出功能实现

到此这篇关于Vue实现导入Excel功能的文章就介绍到这了,更多相关vue导入Excel内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
Vue与React的区别和优势对比
Dec 18 Vue.js
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
Dec 30 Vue.js
vue watch监控对象的简单方法示例
Jan 07 Vue.js
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
Vue3 Composition API的使用简介
Mar 29 Vue.js
如何理解Vue简单状态管理之store模式
May 15 Vue.js
Vue项目打包、合并及压缩优化网页响应速度
Jul 07 Vue.js
vue+elementUI实现表格列的显示与隐藏
Apr 13 Vue.js
vue 自定义组件添加原生事件
Apr 21 Vue.js
Vue图片裁剪组件实例代码
vue3中provide && inject的使用
Jul 01 #Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 #Vue.js
vue+element ui实现锚点定位
Jun 29 #Vue.js
vue实现锚点定位功能
Vue实现tab导航栏并支持左右滑动功能
Vue3.0写自定义指令的简单步骤记录
You might like
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
ionic实现下拉刷新载入数据功能
2017/05/11 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
[05:13]TI4 中国战队 机场出征!!
2014/07/07 DOTA
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
Python 绘图和可视化详细介绍
2017/02/11 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
python程序控制NAO机器人行走
2019/04/29 Python
python数组循环处理方法
2019/08/26 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
python字典的值可以修改吗
2020/06/29 Python
python opencv肤色检测的实现示例
2020/12/21 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
面向对象设计的原则是什么
2013/02/13 面试题
大堂副理的岗位职责范文
2014/02/17 职场文书
服务之星事迹材料
2014/05/03 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
热血教师观后感
2015/06/10 职场文书
新郎新娘致辞
2015/07/31 职场文书
小学英语教学反思范文
2016/02/15 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL