前端導入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
繁體地址,請注明出處:http://hk.pswp.cn/web/82380.shtml
英文地址,請注明出處:http://en.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;查…