vue3 采用xlsx库实现本地上传excel文件,前端解析为Json数据

embedded/2025/2/22 15:27:50/

需求:本地上传excel 文件,但需要对excel 文件的内容进行解析,然后展示出来

1. 安装依赖

首先,确保安装了 xlsx 库:

bash复制

npm install xlsx

2. 创建 Vue 组件

创建一个 Vue 组件(如 ExcelUpload.vue),用于实现文件上传和解析功能。

组件代码:

<template>
  <div>
    <input type="file" class="file-btn hoverPointer" accept=".xls,.xlsx"

                            @change="changeExcel($event)" />
    <div v-if="tableData.length > 0">
      <table>
        <thead>
          <tr>
            <th v-for="header in headers" :key="header">{{ header }}</th>
          </tr>
        </thead>
        <tbody>
          <tr v-for="(row, index) in tableData" :key="index">
            <td v-for="cell in row" :key="cell">{{ cell }}</td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
</template>

<script>
import { ref } from 'vue';
import * as XLSX from 'xlsx';

export default {
  setup() {
    const headers = ref([]);
    const tableData = ref([]);

    const changeExcel= (event) => {

        const files = e.target.files

        if (files.length <= 0) {

            return false

        } else if (!/\.(xls|xlsx)$/.test(files[0].name.toLowerCase())) {

            console.log('上传格式不正确,请上传xls或者xlsx格式')

            return false

        }

      const reader = new FileReader();
      reader.onload = (e) => {
        const data = e.target.result;
        const workbook = XLSX.read(data, { type: 'binary' });
        const sheetName = workbook.SheetNames[0];
        const worksheet = workbook.Sheets[sheetName];
        const json = XLSX.utils.sheet_to_json(worksheet, { header: 1 });

        headers.value = json[0]; // 表头
        tableData.value = json.slice(1); // 表格数据
      };
      reader.readAsBinaryString(files);
    };

    return {
      headers,
      tableData,
      handleFileUpload,
    };
  },
};
</script>

<style scoped>
table {
  width: 100%;
  border-collapse: collapse;
}
th, td {
  border: 1px solid #ccc;
  padding: 8px;
  text-align: left;
}
</style>

3. 使用组件

在主应用文件(如 App.vue)中引入并使用该组件:

<template>
  <div id="app">
    <ExcelUpload />
  </div>
</template>

<script>
import ExcelUpload from './components/ExcelUpload.vue';

export default {
  name: 'App',
  components: {
    ExcelUpload,
  },
};
</script>

4. 功能说明

  1. 文件上传:通过 <input type="file"> 元素选择 Excel 文件

  2. 文件读取:使用 FileReader 读取文件内容为二进制字符串

  3. 解析为 JSON:使用 xlsx 库将 Excel 数据转换为 JSON 格式 。

  4. 数据展示:将解析后的表头和数据展示在表格中。

5. 扩展功能

  • 错误处理:在文件读取和解析过程中添加错误处理,提示用户文件格式错误或解析失败。

  • 大文件优化:对于大文件,可以分页显示数据或使用异步加载。

  • 自定义解析逻辑:根据实际需求,对数据进行格式转换或校验。

通过以上步骤,你可以在 Vue 3 项目中实现本地上传 Excel 文件并解析为 JSON 数据的功能。


http://www.ppmy.cn/embedded/164371.html

相关文章

matlab计算齿轮啮合的时变啮合刚度

matlab该程序可以用来计算齿轮啮合的时变啮合刚度 资源文件列表 mesh_stiffness1.m , 4668

QoS质量配置

他们祝你挺拔&#xff0c;再挺拔一点&#xff1b;我只祝你&#xff0c;永远年少&#xff0c;永远一骑当先. 1. QoS的概念 QoS(服务质量)是指一个网络能够利用各种各样的基础技术向选定的网络通信提供更好 的服务的能力。这些基础技术包括&#xff1a;帧中继&#xff08;FrameR…

路由器的WAN口和LAN口有什么区别?

今时今日&#xff0c;移动终端盛行的时代&#xff0c;WIFI可以说是家家户户都有使用到的网络接入方式。那么路由器当然也就是家家户户都不可或缺的设备了。而路由器上的两个实现网络连接的基础接口 ——WAN 口和 LAN 口&#xff0c;到底有什么区别&#xff1f;它们的功能和作用…

oracle数据库awr取间隔调整

一、查看取值间隔 SQL> select * from dba_hist_wr_control; DBID SNAP_INTERVAL RETENTION TOPNSQL ---------- ------------------------------ ------------------------------ ---------- 1549435079 00000 01:00:00.0 00008 00:00:00.0 DEFAULT 二、修改采集间隔和…

跳跃游戏II(力扣45)

这道题在跳跃游戏(力扣55)-CSDN博客 的基础上需要找到最小的跳跃次数。那么我们需要用一个变量来统计跳跃次数&#xff0c;而难点就在于何时让该变量的值增加。这一点我写在注释中&#xff0c;大家结合我的代码会更好理解。其他部分跟跳跃游戏(力扣55)-CSDN博客 几乎相同&#…

SpringBoot高级-底层原理

目录 1 SpringBoot自动化配置原理 01-SpringBoot2高级-starter依赖管理机制 02-SpringBoot2高级-自动化配置初体验 03-SpringBoot2高级-底层原理-Configuration配置注解 04-SpringBoot2高级-底层原理-Import注解使用1 05-SpringBoot2高级-底层原理-Import注解使用2 06-S…

网工项目实践2.4 北京公司安全加固、服务需求分析及方案制定

本专栏持续更新&#xff0c;整一个专栏为一个大型复杂网络工程项目。阅读本文章之前务必先看《本专栏必读》。 全网拓扑图展示 一.局域网规划设计 1.子公司北京总部局域网安全加固、网络服务需求 子公司北京总部在与运营商边界需要部署一台防火墙&#xff0c;保护内网的安全。…

Openssl之SM2加解密命令

### 1. 生成 SM2 私钥openssl genpkey -algorithm EC \-pkeyopt ec_paramgen_curve:sm2 \-out sm2_private_key.pem### 2. 从私钥导出 SM2 公钥openssl pkey -in sm2_private_key.pem \-pubout \-out sm2_public_key.pem### 3. 使用 SM2 公钥加密openssl pkeyutl -encrypt \-pu…