vue + elementui 实现前端读取 excel 表格内容

1 篇文章 0 订阅

vue + elementui 实现前端读取 excel 表格内容

最近公司有个需求,将excel表格内容展示到页面中,然后查看展示出来的内容没有问题,再将内容上传到服务端
网上有很多方法,但是楼主并未找到一个适合自己的(搜到的都不怎么好用),所以自己结合网上其他前辈的文章,总结了一份可以直接拿来使用的,希望能帮助到需要的人

我们要实现的效果是点击<el-button>按钮,然后选择excel文件,读取excel文件中的内容,并将内容展示到<el-table>表格中

在这里插入图片描述
在这里插入图片描述
以上就是我们要实现的效果,接下来我们就准备正式开始撸代码了

首先,页面当中HTML中的代码是这样的

<div class="excel">
  <el-upload
    class="upload-demo"
    action=""
    :on-change="handleChange"
    :show-file-list="false"
    :auto-upload="false">
    <el-button size="small" type="primary" style="margin-bottom:15px;">读取excel文件</el-button>
  </el-upload>
  <el-table
    :data="tableData"
    style="width: 100%">
    <el-table-column prop="ip" label="序号" width="180"></el-table-column>
    <el-table-column prop="name" label="姓名" width="180"></el-table-column>
    <el-table-column label="操作">
      <template slot-scope="scope">
        <a @click="handleDelete(scope)">删除</a> |
        <a @click="handelEdit(scope)">修改</a>
      </template>
    </el-table-column>
  </el-table>
</div>
<!--
注意:上面代码有以下 2 个需要注意的点
	1. action 属性必须要有,可以为空,但是不能没有,不然控制台会报错
	2. 钩子函数必须是 on-change 这个钩子,只有这个钩子可以添加文件,其他都是上传,具体可以看[elementtui官方文档的介绍](https://element.eleme.io/#/zh-CN/component/upload)
-->

其次,就是js部分的代码了

注意:在开始js部分代码之前,我们还需要安装一个xlsx工具,下面会用到

// 直接 npm 安装即可
npm install xlsx

然后,下面就是真正js代码的部分了

// data 部分的数据
data () {
  return {
    tableData: [],
    fileContent: '',
    file: '',
    data: ''
  }
},
// 处理方法(核心部分)
methods: {
// 注意:handleDelete 和 handelEdit 这两个方法其实是无关紧要的,只不过我的处理逻辑中有 修改 和 删除 这两个功能,不写的话,会报错
  handleDelete (item) {
    console.log('handleDelete', item)
  },
  handelEdit (item) {
    console.log('handleDelete', item)
  },
// 核心部分代码(handleChange 和 importfile)
handleChange (file, fileList) {
  this.fileContent = file.raw
  const fileName = file.name
  const fileType = fileName.substring(fileName.lastIndexOf('.') + 1)
    if (this.fileContent) {
      if (fileType === 'xlsx' || fileType === 'xls') {
        this.importfile(this.fileContent)
      } else {
        this.$message({
          type: 'warning',
          message: '附件格式错误,请重新上传!'
        })
      }
    } else {
      this.$message({
        type: 'warning',
        message: '请上传附件!'
      })
    }
  },
 importfile (obj) {
   const reader = new FileReader()
   const _this = this
   reader.readAsArrayBuffer(obj)
   reader.onload = function () {
     const buffer = reader.result
     const bytes = new Uint8Array(buffer)
     const length = bytes.byteLength
     let binary = ''
     for (let i = 0; i < length; i++) {
       binary += String.fromCharCode(bytes[i])
     }
      const XLSX = require('xlsx')
      const wb = XLSX.read(binary, {
        type: 'binary'
      })
      const outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]])
      this.data = [...outdata]
      const arr = []
      this.data.map(v => {
        const obj = {}
        obj.ip = v.IP
        obj.name = v.NAME
        arr.push(obj)
      })
      _this.tableData = _this.tableData.concat(arr)
    }
  },
}

好了,以上就是全部的关于代码的内容了,至于页面的样式调整,大家就按照自己的需求来写就可以了,关于css的代码这里我就不列出来了,当然,这对于大家来说也是小case

如果对于这边文章,有什么不对的地方,欢迎大家指出,楼主看到会在第一时间进行修改,前端之路漫长而悠远,希望我们能一起进步,一起成长。

注意:

  1. 浏览器报错:Uncaught ReferenceError: require is not defined
  • 情况说明:如果你是在自己的电脑上新建了一个html文件,并不是在项目中使用,那么浏览器会报这个错误(除非你自己用webpack进行了配置);如果你是在vue项目中使用,应该是看不到这个错误的,因为vueCLI3自带的webpack会自己处理,不需要我们做什么
  • 原因:浏览器并不能识别require,require在nodejs中可以直接使用,但是在本地html文件中不能直接使用,因为浏览器不认识
  • 解决方式:<script lang="javascript" src="./node_modules/xlsx/dist/xlsx.core.min.js"></script>实际引入路径根据自己本地文件进行相应调整
  • 浏览器报错小结:一句话,如果你是直接将代码copy到了一个html文件中,想看一下效果,那么需要通过script标签来引入用到的xlsx文件,如果是通过vueCLI3创建的项目,那么注意里面我说的这一堆废话,你就不用看啦
  • 21
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
Vue.js 是一个流行的 JavaScript 框架,它是一款轻量级、高性能的渐进式框架,适用于构建单页面应用程序和更大规模的应用程序。ElementUI 是一款基于 Vue.js 的组件库,提供了丰富的 UI 组件和交互式构建工具,能够帮助开发人员快速构建美观、易于使用的前端页面。 在使用 Vue.js 和 ElementUI 实现前端页面时,可以通过以下几个方面进行可行性分析: 1. 技术选型分析:Vue.js 和 ElementUI 是成熟的前端框架和组件库,它们具有丰富的功能和良好的文档支持,易于学习和使用。因此,从技术角度来看,使用 Vue.js 和 ElementUI 实现前端页面是可行的。 2. 项目需求分析:在确定使用 Vue.js 和 ElementUI 实现前端页面之前,需要对项目需求进行分析和评估,确定是否需要使用这些框架和组件库。如果项目需要构建大型的单页面应用程序或需要使用复杂的 UI 组件,那么使用 Vue.js 和 ElementUI 可以提高开发效率和用户体验。 3. 团队技能评估:如果团队中已经熟练掌握了 Vue.js 和 ElementUI 的使用,那么使用这些框架和组件库实现前端页面的可行性更高。如果团队中没有相关技能,需要考虑学习和培训的成本。 4. 性能评估:在使用 Vue.js 和 ElementUI 实现前端页面时,需要对性能进行评估,确保页面响应速度和用户体验。可以使用各种工具和技术来优化性能,如使用懒加载、减少 HTTP 请求等。 综上所述,使用 Vue.js 和 ElementUI 实现前端页面是可行的,但需要进行技术选型分析、项目需求分析、团队技能评估和性能评估等方面的考虑。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值