最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • excel导入功能

    正文概述 掘金(墨染灬)   2021-07-02   466

    需求

    我们一次性添加多个员工信息的时候, 需要我们开发一个批量导入的功能:将事先以excel格式保存的文件批量导入进来

    1. 后端提供一个excel模板文件
    2. 用户填写这个excel模板文件
    3. 上传这个文件,实现批量导入功能

    方式

    前端主导(工作大量在前端)

    上传excel文件,把excel文件的内容读出来,还原成最基本的行列结构,按后端的接口要求回传过去。

    excel导入功能

    前端读excel文件,调接口

    后端主导(工作大量在后端)

    excel导入功能

    前端上传excel文件

    步骤

    安装插件

    引入UploadExcel组件并注册为全局

    • 将vue-element-admin提供的组件复制到我们自己的项目 **src/components/UploadExcel**下

    • 在index.js将它注册成全局组件

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

    建立公共导入的页面路由

    新建一个公共的导入页面,即import路由组件 src/views/import/index.vue

    在页面中使用前面封装的excel上传组件,并补充导入成功后的回调函数

    <template>
      <upload-excel :on-success="handleSuccess" />
    </template>
    
    <script>
    export default {
      name: 'Import',
      methods: {
        handleSuccess({ header, results }) {
          console.log(header, results)
        }
      }
    }
    </script>
    

    配置路由

    这个路由不需要根据权限控制,直接定义为静态路由即可。在**src/router/index.js**下的静态路由中添加一个路由

    {
        path: '/import',
        component: Layout,
        hidden: true, // 不显示到左侧菜单
        children: [{
          path: '', 
          component: () => import('@/views/import')
        }]
    }
    

    excel导入-数据处理

    据格式转换:将excel解析好的数据经过处理后,转成可以传给接口调用的数据

    excel导入功能

    调用接口进行excel上传的重点其实是数据的处理,我们需要按照接口的要求,把excel表格中经过插件处理好的数据处理成后端接口要求的格式

    后端接口示例格式

    excel导入功能

    字段中文转英文

    excel中读入的是姓名,而后端是username

    为了方便维护代码,单独封装一个方法来实现这个转换的功能

    /**
         * results excel表格的内容
          // [
              {'姓名':'小张', '手机号': '13712345678'}
            , {.....}
            ]
    
          // 目标
          // [ {'username':'小张','mobile': '13712345678'}, {.....} ]
         */
        // 把一个对象数组中的每个对象的属性名,从中文改成英文
        // 思路:对于原数组每个对象来说
        //    (1) 找出所有的中文key
        //     (2)  得到对应的英文key
        //     (3)  拼接一个新对象: 英文key:值
        transExcel(results) {
          const mapInfo = {
            '入职日期': 'timeOfEntry',
            '手机号': 'mobile',
            '姓名': 'username',
            '转正日期': 'correctionTime',
            '工号': 'workNumber',
            '部门': 'departmentName',
            '聘用形式': 'formOfEmployment'
          }
          return results.map(zhObj => {
            const enObj = {}
            const zhKeys = Object.keys(zhObj) // ['姓名', '手机号']
    
            zhKeys.forEach(zhKey => {
              const enKey = mapInfo[zhKey]
    
              enObj[enKey] = zhObj[zhKey]
            })
    
            return enObj
          })
        }
    

    日期处理

    从excel中读到的时间是number值,而后端是标准日期

    excel内部进行特殊的编码导致变形

    excel导入功能

    借助公式还原

    // 把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)
    }
    

    起源地下载网 » excel导入功能

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元