前端导入Excel表格

前端如何在 Vue 3 中导入 Excel 文件(.xls 和 .xlsx)?

在日常开发中,我们经常需要处理 Excel 文件,比如导入数据表格、分析数据等。文章将在 Vue 3 中实现导入 .xls.xlsx 格式的文件,并解析其中的数据。

安装依赖

我们需要一个强大的工具来解析 Excel 文件,这里推荐使用 xlsx 库。它功能强大,支持多种格式的 Excel 文件。

在项目中安装 xlsx

npm install xlsx

实现步骤

1. 创建一个文件上传组件

首先,我们需要一个文件上传控件,让用户可以选择 Excel 文件。这个控件可以通过 <input type="file"> 来实现。

2. 解析 Excel 文件

当用户上传文件后,我们需要读取文件内容并解析其中的数据。这里我们会用 FileReaderxlsx 库来完成这个任务。

3. 显示解析后的数据

最后,我们将解析后的数据展示在页面上,比如用表格的形式显示。


完整代码

下面是一个完整的 Vue 3 组件,包含文件上传、解析和数据展示功能。

模板部分
<template><div><!-- 文件上传控件 --><input type="file" @change="handleFileUpload" accept=".xlsx, .xls" /><!-- 显示解析后的 Excel 数据 --><table v-if="tableData.length"><thead><tr><th v-for="(header, index) in tableData[0]" :key="index">{{ header }}</th></tr></thead><tbody><tr v-for="(row, rowIndex) in tableData.slice(1)" :key="rowIndex"><td v-for="(cell, cellIndex) in row" :key="cellIndex">{{ cell }}</td></tr></tbody></table></div>
</template>
逻辑部分
<script lang="ts">
import { defineComponent, ref } from 'vue';
import * as XLSX from 'xlsx';export default defineComponent({name: 'ExcelUploader',setup() {// 定义一个响应式变量,也就是数组,用于存储解析后的 Excel 数据 const tableData = ref<Array<Array<string | number>>>([]);// 文件上传处理函数const handleFileUpload = (event: Event) => {const target = event.target as HTMLInputElement; // 获取上传的文件const file = target.files?.[0]; // 获取用户上传的第一个文件if (!file) return; // 如果没有文件,直接返回const reader = new FileReader(); // 创建一个 FileReader 对象,用于读取文件内容reader.onload = (e) => {// 将文件内容转换为 ArrayBufferconst data = new Uint8Array((e.target as FileReader).result as ArrayBuffer);const workbook = XLSX.read(data, { type: 'array' }); // 使用 xlsx 解析 Excel 文件// 获取 Excel 文件的第一个工作表名称const firstSheetName = workbook.SheetNames[0];const worksheet = workbook.Sheets[firstSheetName]; // 获取第一个工作表// 将工作表内容转换为 JSON 数据(二维数组)const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 });tableData.value = jsonData; // 将解析后的数据存储到响应式变量中};reader.readAsArrayBuffer(file); // 以 ArrayBuffer 格式读取文件};return {handleFileUpload, // 文件上传处理函数tableData, // 响应式变量,用于存储解析后的数据};},
});
</script>
样式部分
<style scoped>
table {border-collapse: collapse;width: 100%;
}th, td {border: 1px solid #ddd;padding: 8px;
}th {background-color: #f4f4f4;
}
</style>

代码解析

1. 文件上传控件
<input type="file" @change="handleFileUpload" accept=".xlsx, .xls" />
  • type="file":让用户可以选择文件。
  • @change="handleFileUpload":监听文件上传事件,当用户选择文件时会触发 handleFileUpload 函数。
  • accept=".xlsx, .xls":限制用户只能上传 .xlsx.xls 格式的文件。

2. 文件解析逻辑
const handleFileUpload = (event: Event) => {const target = event.target as HTMLInputElement;const file = target.files?.[0];if (!file) return;const reader = new FileReader();reader.onload = (e) => {const data = new Uint8Array((e.target as FileReader).result as ArrayBuffer);const workbook = XLSX.read(data, { type: 'array' });const firstSheetName = workbook.SheetNames[0];const worksheet = workbook.Sheets[firstSheetName];const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 });tableData.value = jsonData;};reader.readAsArrayBuffer(file);
};
  • FileReader:用于读取用户上传的文件内容。
  • readAsArrayBuffer(file):以 ArrayBuffer 格式读取文件内容。
  • XLSX.read(data, { type: 'array' }):使用 xlsx 库解析 Excel 文件。
  • XLSX.utils.sheet_to_json(worksheet, { header: 1 }):将工作表内容转换为 JSON 数据。

3. 数据展示
<table v-if="tableData.length"><thead><tr><th v-for="(header, index) in tableData[0]" :key="index">{{ header }}</th></tr></thead><tbody><tr v-for="(row, rowIndex) in tableData.slice(1)" :key="rowIndex"><td v-for="(cell, cellIndex) in row" :key="cellIndex">{{ cell }}</td></tr></tbody>
</table>
  • v-if="tableData.length":只有当 tableData 中有数据时才显示表格。
  • tableData[0]:第一行数据作为表头。
  • tableData.slice(1):从第二行开始作为表格内容。

运行效果

  1. 用户点击文件上传按钮,选择一个 .xls.xlsx 文件。
  2. 文件上传后,解析其中的数据。
  3. 将解析后的数据展示在页面上,表头和内容清晰可见。

总结

通过以上步骤,我们成功实现了在 Vue 3 中导入 Excel 文件的功能。这个功能可以应用于很多场景,比如数据导入、表格分析等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/82380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++和C#界面开发方式的全面对比

文章目录 C界面开发方式1. **MFC&#xff08;Microsoft Foundation Classes&#xff09;**2. **Qt**3. **WTL&#xff08;Windows Template Library&#xff09;**4. **wxWidgets**5. **DirectUI** C#界面开发方式1. **WPF&#xff08;Windows Presentation Foundation&#xf…

刷leetcode hot100返航必胜版--链表6/3

链表初始知识 链表种类&#xff1a;单链表&#xff0c;双链表&#xff0c;循环链表 链表初始化 struct ListNode{ int val; ListNode* next; ListNode(int x): val&#xff08;x&#xff09;,next(nullptr) {} }; //初始化 ListNode* head new ListNode(5); 删除节点、添加…

软考 系统架构设计师系列知识点之杂项集萃(78)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;77&#xff09; 第139题 以下关于软件测试工具的叙述&#xff0c;错误的是&#xff08;&#xff09;。 A. 静态测试工具可用于对软件需求、结构设计、详细设计和代码进行评审、走查和审查 B. 静…

【Unity】云渲染

1 前言 最近在搞Unity云渲染的东西&#xff0c;所以研究了下官方提供的云渲染方案Unity Renderstreaming。注&#xff1a;本文使用的Unity渲染管线是URP。 2 文档 本文也只是介绍基本的使用方法&#xff0c;更详细内容参阅官方文档。官方文档&#xff1a;Unity Renderstreamin…

组相对策略优化(GRPO):原理及源码解析

文章目录 PPO vs GRPOPPO的目标函数GRPO的目标函数KL散度约束与估计ORM监督RL的结果PRM监督RL的过程迭代RL算法流程 GRPO损失的不同版本GRPO源码解析 DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models PPO vs GRPO PPO的目标函数 J P P O…

Linux或者Windows下PHP版本查看方法总结

确定当前服务器或本地环境中 PHP 的版本,可以通过以下几种方法进行操作: 1. 通过命令行检查 这是最直接且常用的方法,适用于本地开发环境或有 SSH 访问权限的服务器。 方法一:php -v 命令 php -v输出示例:PHP 8.1.12 (cli) (built: Oct 12 2023 12:34:56) (NTS) Copyri…

[Linux] MySQL源码编译安装

目录 环境包安装 创建程序用户 解压源码包 配置cmake ​编辑编译 安装 配置修改属性 属主和属组替换成mysql用户管理 系统环境变量配置 初始化数据库 服务管理 启动 环境包安装 yum -y install ncurses ncurses-devel bison cmake gcc gcc-c 重点强调&#xff1a;采…

【C++项目】负载均衡在线OJ系统-1

文章目录 前言项目结果演示技术栈&#xff1a;结构与总体思路compiler编译功能-common/util.hpp 拼接编译临时文件-common/log.hpp 开放式日志-common/util.hpp 获取时间戳方法-秒级-common/util.hpp 文件是否存在-compile_server/compiler.hpp 编译功能编写&#xff08;重要&a…

转战海外 Web3 远程工作指南

目录 一、明确职业目标和技能 二、准备常用软件 &#xff08;一&#xff09;通讯聊天工具 &#xff08;二&#xff09;媒体类平台 &#xff08;三&#xff09;线上会议软件 &#xff08;四&#xff09;办公协作工具 &#xff08;五&#xff09;云存储工具 &#xff08;六…

MongoDB账号密码笔记

先连接数据库&#xff0c;新增用户密码 admin用户密码 use admin db.createUser({ user: "admin", pwd: "yourStrongPassword", roles: [ { role: "root", db: "admin" } ] })用户数据库用户密码 use myappdb db.createUser({ user: &…

CSS强制div单行显示不换行

在CSS中&#xff0c;要让<div>的内容强制单行显示且不换行&#xff0c;可通过以下属性组合实现&#xff1a; 核心解决方案&#xff1a; css 复制 下载 div {white-space: nowrap; /* 禁止文本换行 */overflow: hidden; /* 隐藏溢出内容 */text-overflow: e…

RK3568-快速部署codesys runtime

前期准备 PC-win10系统 RK3568-debian系统,内核已打入实时补丁,开启ssh服务。PC下载安装CODESYS Development System V3.5.17.0 https://store.codesys.com/en/codesys.html#product.attributes.wrapperPC下载安装 CODESYS Control for Linux ARM64 SL 4.1.0.0.package ht…

中英混合编码解码全解析

qwen模型分词器怎么映射的:中英混合编码解码全解析 中英文混合编码与解码的过程,本质是 字符编码标准(如 UTF-8)对多语言字符的统一处理 ,核心逻辑围绕“字节序列 ↔ 字符映射”展开 北京智源人工智能研究院中文tokenID qwen模型分词器文件 一、编码阶段:统一转为字节序…

React 事件处理与合成事件机制揭秘

引言 在现代前端开发的技术生态中&#xff0c;React凭借其高效的组件化设计和声明式编程范式&#xff0c;已成为构建交互式用户界面的首选框架之一。除了虚拟DOM和单向数据流等核心概念&#xff0c;React的事件处理系统也是其成功的关键因素。 这套系统通过"合成事件&qu…

冷雨泉教授团队:新型视觉驱动智能假肢手,拟人化抓握技术突破,助力截肢者重获生活自信

研究背景&#xff1a;日常生活中&#xff0c;健康人依靠手完成对物体的操作。对于手部截肢患者&#xff0c;手部的缺失导致他们难以有效地操作物体&#xff0c;进而影响正常的日常生活。拥有一个能够实现拟人地自然抓取多种日常物体的五指动力假手是手部截肢患者的夙愿&#xf…

android 媒体框架之MediaCodec

一、MediaCodec 整体架构与设计思想 MediaCodec 是 Android 底层多媒体框架的核心组件&#xff0c;负责高效处理音视频编解码任务。其架构采用 生产者-消费者模型&#xff0c;通过双缓冲区队列&#xff08;输入/输出&#xff09;实现异步数据处理&#xff1a; 输入缓冲区队列…

Starrocks Full GC日志分析

GC日志样例&#xff1a; [2025-06-03T07:36:06.1770800] GC(227) Pause Full (G1 Evacuation Pause) [2025-06-03T07:36:06.1960800] GC(227) Phase 1: Mark live objects [2025-06-03T07:36:06.9480800] GC(227) Cleaned string and symbol table, strings: 47009 processed,…

React从基础入门到高级实战:React 高级主题 - React 微前端实践:构建可扩展的大型应用

React 微前端实践&#xff1a;构建可扩展的大型应用 引言 在2025年的技术生态中&#xff0c;Web应用的规模和复杂性持续增长&#xff0c;微前端&#xff08;Micro Frontends&#xff09;已成为应对大型项目挑战的主流架构。通过将前端应用拆分为多个独立模块&#xff0c;微前…

定时器:中央对齐模式剖析

中央对齐模式&#xff08;Center-Aligned Mode&#xff09;下&#xff0c;当配置为 模式3&#xff08;CMS[1:0] 11&#xff09; 时&#xff0c;定时器会同时触发 上溢中断&#xff08;ARR中断&#xff09; 和 下溢中断&#xff08;0中断&#xff09;&#xff0c;即一个PWM周期…

MySQL强化关键_019_索引优化

目 录 一、最左前缀原则 1.完全使用索引 2.部分使用索引 3.不使用索引 4.效率折损 &#xff08;1&#xff09;使用范围查找 &#xff08;2&#xff09;索引断开 二、索引失效场景 1. 索引列参与运算 2.索引列模糊查询以“%”开始 3.索引列是字符串类型&#xff0c;查…