vue 本地上传Excel文件并读取内容

news/2024/7/21 7:38:57 标签: vue.js, excel, 前端

陌路遇见,陌路告别,陌路问好,九月再见,十月重现!

首先我来讲解一下我的思路:

  1. 首先,在模板部分,我们有以下元素:
    <input type=“file” @change=“handleFileUpload” accept=“.xlsx, .xls” />: 这是一个文件输入元素,允许用户选择Excel文件以进行上传。当文件选择发生变化时,@change绑定了handleFileUpload方法,以处理文件上传事件,并且accept属性指定了只允许选择具有.xlsx或.xls扩展名的文件。

  2. 在Vue实例的data属性中,我们定义了excelData数组,它将用于存储Excel文件的内容。

  3. 在methods部分,我们定义了一个名为handleFileUpload的方法,该方法用于处理文件上传事件。当用户选择一个Excel文件并触发@change事件时,此方法会执行以下操作:
    a. 获取上传的文件对象。
    b. 创建一个新的FileReader对象。
    c. 设置reader.onload回调,该回调会在文件读取完成后执行。在此回调中,我们将解析Excel文件的内容。
    d. 使用XLSX库的XLSX.read方法,解析文件数据,并获取工作表的内容。然后,我们将工作表的数据转换为JavaScript对象数组,将其存储在excelData属性中。

废话不多说,接下来上代码:

在这里插入图片描述

代码中有详细解说

<template>
  <div>
    <input type="file" @change="handleFileUpload" accept=".xlsx, .xls"/>
    <div id="excelData">
      <table v-if="excelData.length">
        <!--        <thead>-->
        <!--        <tr>-->
        <!--          <th v-for="(header, index) in excelData[0]" :key="index">{{ index }}</th>-->
        <!--        </tr>-->
        <!--        </thead>-->
        <tbody>
        <tr v-for="(row, rowIndex) in excelData" :key="rowIndex">
          <td v-for="(cell, cellIndex) in row" :key="cellIndex">
            <p v-if="rowIndex!=0&&rowIndex!=1">{{ cell }}</p>
          </td>
        </tr>
        </tbody>
      </table>
    </div>
  </div>
</template>

<script>
import * as XLSX from 'xlsx'   // npm install xlsx --save 安装命名

export default {
  name: 'Excel',
  data () {
    return {
      excelData: [],
    }
  },
  methods: {
    handleFileUpload (event) {
      const file = event.target.files[0]  //获取上传的文件

      if (file) {
        const reader = new FileReader() //创建FileReader对象,说明:它通常用于处理本地文件的读取操作,例如读取文本文件、图像文件、或像前面示例中的Excel文件一样的二进制文件

        reader.onload = (event) => {   // 设置事件监听器
          const data = event.target.result
          /*
          使用XLSX库的XLSX.read方法解析文件数据
         'array'(默认值): 这是最常见的类型。它用于读取二进制数据数组,通常是通过 FileReader 读取的文件数据。这是用于读取二进制格式文件,如 Excel 文件的一种常见类型。
         'binary': 用于读取二进制字符串。这可以用于将二进制数据传递为二进制字符串。
         'base64': 用于读取 base64 编码的数据。如果你有一个 base64 编码的文件内容,你可以使用这个类型来读取它。
         'buffer': 用于 Node.js 环境,可以读取 Node.js Buffer 对象中的数据。
         'file': 用于在浏览器中直接读取文件对象。这个选项通常用于读取用户选择的文件而不需要先通过 FileReader 将其读取为数组。
          不同的 type 选项允许你根据数据的来源和格式来选择适当的类型,以便 XLSX 库能够正确解析数据。在大多数情况下,使用 'array' 是最常见的,因为它适用于通过 FileReader 读取的文件数据,这是处理文件上传的典型用例。
          * */
          const workbook = XLSX.read(data, { type: 'array' })

          const firstSheetName = workbook.SheetNames[0]
          const worksheet = workbook.Sheets[firstSheetName]
          this.excelData = XLSX.utils.sheet_to_json(worksheet)
        }

        reader.readAsArrayBuffer(file)
      }
    }
  }
}
</script>

<style scoped>

</style>

最后我想说:给自己一点轻松,给自己一点快乐,忙里偷闲去着意品味一下生活的乐趣吧。


http://www.niftyadmin.cn/n/5082981.html

相关文章

为什么MyBatis是Java数据库持久层的明智选择

在Java应用程序的开发中&#xff0c;选择合适的数据库持久层框架至关重要。一个明智的选择可以帮助开发人员更好地管理数据库交互、提高性能和简化开发工作。 &#xff08;一&#xff09;为什么要选MyBatis JDBCHibernate / JPAMyBatis简单直接ORM轻量动态SQL关联查询开发效率…

【图像误差测量】测量 2 张图像之间的差异,并测量图像质量(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【ES6 03】变量解构赋值

变量解构赋值 数组解构赋值1 基操2 默认值 对象的解构赋值默认值注意 字符串的解构赋值数值与布尔值的解构赋值函数参数的解构赋值圆括号不得使用 作用 数组解构赋值 1 基操 ES6允许按照一定的模式从数组和对象中提取值从而对变量进行赋值&#xff0c;也即解构&#xff08;De…

使用注解新开事务 @Transactional

使用注解新开事务 Transactional(propagation Propagation.REQUIRES_NEW)

满足新能源三电系统气密和电性能测试的E10系列多功能电连接器

在新能源汽车的测试领域中&#xff0c;三电系统的测试是质量管控过程中非常重要的组成部分。无论是防水防尘的气密性测试&#xff0c;还是EOL/DCR等电性能相关的测试&#xff0c;都是确保新能源汽车正常工作中不可缺少的一部分。 在以往的测试中&#xff0c;每种测试都是独立的…

6 Best Books on Kubernetes for Beginners in 2023

目录 1. 6 Best Books on Kubernetes for Beginners in 20231.1. Why learn Kubernetes?1.2. What Makes Best Kubernetes Books?1.3. Best Books on Kubernetes1.3.1. Best book for total beginners: The Kubernetes Book 1.4. Best book for step-by-step learners: Kuber…

Element UI怎么安装呢?

安装 :::warning 注意 后续演示将会在 Vue CLI 搭建的 Vue 项目上进行操作。如需要请查看 Vue CLI 安装 ::: 通过 YARN 命令安装 $ yarn add element-ui完整引入 代表一次性引入所有组件&#xff0c;比较省心省事&#xff0c;但是项目的打包体积也会跟着变大。 // main.js…

执行make menuconfig问题的解决

执行make menuconfig 出现问题 在终端输入以下命令执行。 make menuconfig在终端输入上面命令执行时&#xff0c;没有成功运行&#xff0c;出现了如下的问题。 出现这个错误提示意味着在运行 make menuconfig 命令时&#xff0c;系统找不到 ncurses 库。ncurses 是一种文本用…