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 相关文章推荐
springboot+vue实现文件上传下载
Nov 17 Vue.js
如何在 Vue 表单中处理图片
Jan 26 Vue.js
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
Feb 26 Vue.js
Vue全局事件总线你了解吗
Feb 24 Vue.js
vue如何使用模拟的json数据查看效果
Mar 31 Vue.js
vue实现拖拽交换位置
Apr 07 Vue.js
使用vue判断当前环境是安卓还是IOS
Apr 12 Vue.js
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
Apr 24 Vue.js
vue.js 使用原生js实现轮播图
Apr 26 Vue.js
Vue router配置与使用分析讲解
Dec 24 Vue.js
Vue Element plus使用方法梳理
Dec 24 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
乐信RP2100的电路分析和打磨
2021/03/02 无线电
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
谈谈vue中mixin的一点理解
2017/12/12 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
机械专业应届生求职信
2013/12/12 职场文书
会计专业自荐信范文
2015/03/05 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
人民币符号
2022/02/17 杂记