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

首先我们需要在Vue项目中安装两个依赖:xlsxfile-saver。分别是用于解析Excel和保存文件的。

npm install xlsx file-saver

安装完毕后,在需要导入Excel的页面中,首先需要创建一个上传文件的组件,并绑定一个点击事件。

<template>
  <div>
    <input type="file" ref="fileInput" @change="handleFile"/>
    <button @click="importExcel">导入Excel</button>
  </div>
</template>

然后我们需要编写handleFile方法,用于处理选择的文件。在这个方法中,我们需要将文件转化为二进制数据,然后将该数据存储到data中,用于导入时使用。

export default {
  ...
  data() {
    return {
      fileData: null
    }
  },
  methods: {
    handleFile() {
      const file = this.$refs.fileInput.files[0]
      const reader = new FileReader()
      reader.onload = (e)  =>  {
        const data = e.target.result
        this.fileData = data
      }
      reader.readAsBinaryString(file)
    }
  }
}

最后,我们需要编写导入Excel的方法。这里我们使用到了xlsxread方法,将我们存储的二进制数据解析成一个JSON对象。

import { read } from 'xlsx'
import { saveAs } from 'file-saver'

export default {
  ...
  methods: {
    ...
    importExcel() {
      const wb = read(this.fileData, { type: 'binary' })
      const ws = wb.Sheets[wb.SheetNames[0]]
      const data = JSON.parse(JSON.stringify(ws, ['!ref', 'v']))

      // 处理解析出来的数据, 进行你的相关业务逻辑处理

      // 示例:将解析出的数据导出为excel文件
      const xlsData = [['姓名', '年龄'], ['张三', 18], ['李四', 20], ['王五', 22]]
      const wsName = '导出数据'
      const wb = { SheetNames: [wsName], Sheets: {} }
      wb.Sheets[wsName] = Object.assign({}, xlsData, { '!ref': `A1:B${xlsData.length + 1}` })
      const wbOut = read(wb, { bookType: 'xlsx', type: 'binary' })
      saveAs(new Blob([s2ab(wbOut)], { type: 'application/octet-stream' }), '导出数据.xlsx')
      this.fileData = null
    }
  }
}

以上就是实现Vue导入Excel的主要步骤了。需要注意的是,在导出时,我们需要编写saveAs方法,用于在浏览器中下载生成的Excel文件。并且在编写wb对象时,需注意!ref属性的设置。这个值代表了Excel表格数据区域的大小,需要保证其与实际存储的数据大小一致。

所以,通过上述代码,我们可以成功实现Vue导入Excel的功能。

示例1:

比如说,我们在handleFile方法中可以添加一段代码,将解析出来的数据打印出来,在浏览器console面板查看解析结果。

export default {
  ...
  methods: {
    handleFile() {
      ...
      reader.onload = (e) => {
        const data = e.target.result
        this.fileData = data
        const wb = read(data, { type: 'binary' })
        const ws = wb.Sheets[wb.SheetNames[0]]
        const json = JSON.stringify(ws, ['!ref', 'v'])
        console.log(JSON.parse(json))
      }
      ...
    }
  }
}

示例2:

再比如说,我们可以将解析出来的数据渲染到页面上。这里我使用iview组件库中的table组件,用于展示表格数据。

<template>
  <div>
    <input type="file" ref="fileInput" @change="handleFile"/>
    <button @click="importExcel">导入Excel</button>
    <Table :columns="columns" :data="tableData"></Table>
  </div>
</template>

<script>
import { read } from 'xlsx'
import { saveAs } from 'file-saver'
import { Table } from 'iview'

export default {
  components: {
    Table
  },
  data() {
    return {
      fileData: null,
      columns: [
        {
          title: '姓名',
          key: 'name'
        },
        {
          title: '年龄',
          key: 'age'
        }
      ],
      tableData: []
    }
  },
  methods: {
    ...
    importExcel() {
      ...
      this.tableData = []
      for (let i = 1; i < data.length; i++) {
        this.tableData.push({
          name: data[i][0],
          age: data[i][1]
        })
      }
    }
  }
}
</script>

在这个示例中,我将解析出来的Excel数据存储到了tableData中,并将其渲染到了页面的表格中,方便用户查看。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue实现导入Excel功能步骤详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue3.x源码剖析之数据响应式的深入讲解

    Vue3.x源码剖析之数据响应式的深入讲解 简介 本文将深入讲解Vue3.x响应式原理,包含以下内容: 什么是响应式 Vue2.x的响应式实现 Vue3.x的响应式实现 Vue3.x的响应式能力扩展 什么是响应式 简单来说,响应式是指当某个数据发生变化时,相关的代码会自动触发更新,以保证用户界面与数据的同步。 在前端开发中,响应式是非常重要的概念。Vue就是…

    Vue 2023年5月28日
    00
  • Vue2响应式系统之set和delete

    Vue2的响应式系统是Vue框架的核心特性之一,它能够非常方便地让我们做到数据和视图的同步更新。其中,set和delete是两个非常重要的方法,它们可以用来动态地添加、修改和删除响应式的数据属性。下面,我们就来详细讲解一下这两个方法的使用方法。 set方法 set方法的作用是在Vue实例中添加响应式属性,并给它赋一个初始值。它的语法如下: Vue.set(o…

    Vue 2023年5月29日
    00
  • Vue3学习之事件处理详解

    Vue3学习之事件处理详解 在Vue3中,事件处理是非常常见的操作。Vue3提供了许多事件处理函数,方便开发者处理各种事件。本文将详细讲解Vue3中的事件处理,包括以下内容: @click、@dbclick等基本事件处理 v-model的事件处理 自定义事件 基本事件处理 @click @click是Vue3中最常用的事件处理函数之一。它可以在元素被点击时触…

    Vue 2023年5月27日
    00
  • 详解vue 路由跳转四种方式 (带参数)

    详解vue 路由跳转四种方式 (带参数) 在vue中,路由跳转是非常常见的操作,我们可以使用vue-router提供的四种方式进行路由跳转。本文将详细讲解这四种方式,并提供带参数的示例。 1. router.push 使用router.push可以向路由添加一个新的历史记录,这意味着用户可以使用浏览器的后退按钮回到之前的页面。这种方式常用于页面跳转或者在当前…

    Vue 2023年5月28日
    00
  • Vue组件模板的几种书写形式(3种)

    当使用Vue.js构建应用程序时,组件是不可或缺的部分。Vue组件模板是描述组件外观的一种结构,它可以通过多种方式进行书写。本文将介绍Vue组件模板的三种常见书写形式。 1. 渲染函数形式 在Vue中,我们可以使用渲染函数来动态生成组件模板,而不是将模板作为字符串传递。渲染函数形式使用JavaScript来构建组件模板,具有更高的灵活性和可复用性。下面是一个…

    Vue 2023年5月28日
    00
  • Vue中provide、inject详解以及使用教程

    Vue中provide、inject详解以及使用教程 在Vue的组件嵌套过程中,往往需要在祖先组件中定义一些属性或变量,然后在子组件中使用。虽然可以通过props传递数据来解决问题,但是当组件嵌套层级变多时,props的传递会很繁琐。在这种情况下,Vue中的provide、inject就可以派上用场了。 provide、inject是什么? provide和…

    Vue 2023年5月27日
    00
  • 创建和运行Vue.js项目方法demo

    让我们来讲解如何创建和运行Vue.js项目。下面是完整攻略: 1. 安装 Node.js 安装Vue.js需要先安装Node.js。Node.js可以在Node.js官网上进行下载安装。选择相应平台的安装包进行下载,并按照提示进行安装。 安装完成后,可以在命令行中输入node -v和npm -v查看Node.js和npm的版本号,确认安装成功。 2. 创建V…

    Vue 2023年5月27日
    00
  • 简单聊一聊axios配置请求头content-type

    当使用axios发送HTTP请求时,你可以在请求中添加headers头部来指定Content-Type类型。默认情况下,Content-Type类型为application/json。这意味着在发送axios请求时,如果我们的请求需要使用不同的Content-Type设置,我们需要进行额外的配置。 下面是一份通用的axios请求配置,可以让我们设置请求头的C…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部