IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> VUE-elementui下利用inputfile读取excel,inputfile样式修改 -> 正文阅读

[JavaScript知识库]VUE-elementui下利用inputfile读取excel,inputfile样式修改

1.为什么用inputfile不用elementui原生upload?

el-upload试过必须填action地址给我整不会了。

2.为什么添加一个按钮触发inputfile事件?

原生的inputfile太丑了,看不下去。

3.我要实现什么

实现读取excel中数据转换为对应数据

导入xlsx

npm install xlsx -S

创建组件excelReader

<template>
  <div>
    <el-button style="height: 30px; margin: 5px 0 0 10px;" size="mini" @click="triggerUpload">上传文件</el-button>
    <input
      v-show="false"
      ref="fileTemp"
      type="file"
      accept=".xlsx,.xls"
      @change="getImportFile"
    />
  </div>
</template>

<script>
  import XLSX from 'xlsx' 

  export default {
    data () {
      return {
        names: [],
      }
    },
    methods: {
      // 用按钮触发input上传空间
      triggerUpload () {
        this.$refs.fileTemp.click()
      },
      // 获取文件
      getImportFile () {
        if (this.$refs.fileTemp && !this.$refs.fileTemp.files[0]) return false
        const selectedFile = this.$refs.fileTemp.files[0]
        this.readFile(selectedFile)
      },
      // 将文件转换成 JSON
      readFile (file) {
        const that = this
        const reader = new FileReader()
        reader.onload = function (e) {
          const wb = XLSX.read(e.target.result, { type: 'binary' }) // 读取文件
          const wbSheetName = wb.SheetNames[0]
          const wbSheet = wb.Sheets[wbSheetName]
          // 解析文件 {defval: ''}=>防止单元格为空的时解析出来的结果缺少相应的key
          const selectFileData = XLSX.utils.sheet_to_json(wbSheet, { defval: '' })
          if (!selectFileData.length) {
            that.$message.warning(`上传的文件数据为空!`)
            return false
          } else {
            that.$message.success(`读取文件成功!`)
          }
          // 对获取到的对象数组进行操作
          for (let i = 0; i < selectFileData.length; i++) {
            delete selectFileData[i].__EMPTY
          }
          // 将对象数组 转换成 JSON类型,这一块我只选了名称,各位自行筛选
          const names = []
          for (const data of selectFileData) {
            names.push(data['名称'])
          }
          that.$emit('transName2Ids', names)
        }
        reader.readAsBinaryString(file)
      },
    },
  }
</script>

<style scoped>

</style>

父组件引入,其中transName2Ids是父组件处理数据的方法

<excel-read @transName2Ids="transName2Ids"></excel-read>

实现效果

?

?

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 11:48:02  更:2022-05-10 11:49:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/11 5:33:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码