vue3 excel文件導入

文章目錄

  • 前言
  • 使用
  • 在vue文件中的使用

前言

最近寫小組官網涉及到了excel文件導入的功能 場景是導入小組成員年級 班級 郵箱 組別 姓名等基本信息的excel表格用于展示各組信息

使用

先下載js庫

npm install xlsx

為了提高代碼的復用性 我將它寫成了一個通用的函數

import apiClient from "@/api/axios";
import * as XLSX from "xlsx";interface UserData {姓名: string;學號: string;郵箱: string;班級: string;年級: string;組別: string;電話: string;QQ: string;
}// 驗證文件后綴
function validateFileExtension(fileName: string): boolean {return fileName.toLowerCase().endsWith(".xlsx");
}// 驗證Excel字段
async function validateExcelFields(file: File): Promise<string | boolean> {return new Promise((resolve, reject) => {const reader = new FileReader();reader.onload = (e) => {try {const data = new Uint8Array(e.target?.result as ArrayBuffer);const workbook = XLSX.read(data, { type: "array" });const firstSheet = workbook.Sheets[workbook.SheetNames[0]];const jsonData = XLSX.utils.sheet_to_json<UserData>(firstSheet);if (jsonData.length === 0) {reject("Excel文件內容為空");return;}const requiredFields = ["姓名","學號","班級","年級","組別","電話","QQ",];const missingFields = requiredFields.filter((field) => !(field in jsonData[0]),);if (missingFields.length > 0) {reject(`文件缺少必要字段`);return;}resolve(true);} catch (error) {reject("文件解析失敗");}};reader.onerror = () => reject("文件讀取失敗");reader.readAsArrayBuffer(file);});
}//批量導入
export async function processFiles(file: File) {if (!validateFileExtension(file.name)) {throw "請上傳.xlsx格式的文件";}try {const validationResult = await validateExcelFields(file);if (validationResult !== true) {throw validationResult as string;}const formData = new FormData();formData.append("file", file);return await apiClient.post("/userManager/teamInfo/addUsers", formData, {headers: {"Content-Type": "multipart/form-data",},});} catch (error) {// 修改此處:將返回改為拋出if (error instanceof Error) {throw error.message;}throw typeof error === "string" ? error : "未知錯誤";}
}// 模擬非.xlsx 文件
const nonXlsxFile = new File([], "example.txt", { type: "text/plain" });
processFiles(nonXlsxFile).then((result) => {console.log(result);
});

該文件可以在用戶上傳時檢查上傳的文件后綴是否為xlsx 以及如果上傳的文件后綴是xlsx
那么檢查表格中是否有該有的字段 如果沒有則直接攔截不發送請求

在vue文件中的使用

const handleXlsx = (e: Event) => {const target = e.target as HTMLInputElement;if (target.files) {processFiles(target.files[0]).then((response) => {showAlert("上傳成功", "pass");updateData(grade.value, group.value);target.value = "";}).catch((error) => {showAlert(error, "error");});}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77870.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77870.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77870.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker環境下SpringBoot程序內存溢出(OOM)問題深度解析與實戰調優

文章目錄 一、問題背景與現象還原**1. 業務背景****2. 故障特征****3. 核心痛點****4. 解決目標** 二、核心矛盾點分析**1. JVM 與容器內存協同失效****2. 非堆內存泄漏****3. 容器內存分配策略缺陷** 三、系統性解決方案**1. Docker 容器配置**2. JVM參數優化&#xff08;容器…

【PGCCC】Postgres MVCC 內部:更新與插入的隱性成本

為什么 Postgres 中的更新操作有時感覺比插入操作慢&#xff1f;答案在于 Postgres 如何在后臺管理數據版本。 Postgres 高效處理并發事務能力的核心是多版本并發控制&#xff08;MVCC&#xff09;。 在本文中&#xff0c;我將探討 MVCC 在 Postgres 中的工作原理以及它如何影響…

Docker使用、容器遷移

Docker 簡介 Docker 是一個開源的容器化平臺&#xff0c;用于打包、部署和運行應用程序及其依賴環境。Docker 容器是輕量級的虛擬化單元&#xff0c;運行在宿主機操作系統上&#xff0c;通過隔離機制&#xff08;如命名空間和控制組&#xff09;確保應用運行環境的一致性和可移…

c#清理釋放內存

雖然c#具有內存管理和垃圾回收機制&#xff0c;但是在arcobjects二次開發嵌入到arcgis data reviewet還會報內存錯誤。需要強制清理某變量內存方法如下: 1設置靜態函數ReleaseCom函數 public static void ReleaseCom(object o) { try{System.Runtime.InteropServices.Marsh…

Linux:進程:進程控制

進程創建 在Linux中我們使用fork函數創建新進程&#xff1a; fork函數 fork函數是Linux中的一個系統調用&#xff0c;用于創建一個新的進程&#xff0c;創建的新進程是原來進程的子進程 返回值&#xff1a;如果子進程創建失敗&#xff0c;返回值是-1。如果子進程創建成功&a…

day1-小白學習JAVA---JDK安裝和環境變量配置(mac版)

JDK安裝和環境變量配置 我的電腦系統一、下載JDK1、oracle官網下載適合的JDK安裝包&#xff0c;選擇Mac OS對應的版本。 二、安裝三、配置環境變量1、終端輸入/usr/libexec/java_home -V查詢所在的路徑&#xff0c;復制備用2、輸入ls -a3、檢查文件目錄中是否有.bash_profile文…

Python項目--基于機器學習的股票預測分析系統

1. 項目介紹 在當今數字化時代&#xff0c;金融市場的數據分析和預測已經成為投資決策的重要依據。本文將詳細介紹一個基于Python的股票預測分析系統&#xff0c;該系統利用機器學習算法對歷史股票數據進行分析&#xff0c;并預測未來股票價格走勢&#xff0c;為投資者提供決策…

計算機視覺與深度學習 | 基于YOLOv8與光流法的目標檢測與跟蹤(Python代碼)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 目標檢測與跟蹤 關鍵實現邏輯檢測-跟蹤協作機制?特征點選擇策略?運動…

Java集合及面試題學習

知識來源沉默王二、小林coding、javaguide 1、ArrayList list.add("66") list.get(2) list.remove(1) list.set(1,"55") List<String> listnew ArrayList<>(); 底層是動態數組 添加元素流程&#xff1a;判斷是否擴容&#xf…

OSPF --- LSA

文章目錄 一、OSPF LSA&#xff08;鏈路狀態通告&#xff09;詳解1. LSA通用頭部2. OSPFv2 主要LSA類型a. Type 1 - Router LSAb. Type 2 - Network LSAc. Type 3 - Summary LSAd. Type 4 - ASBR Summary LSAe. Type 5 - AS External LSAf. Type 7 - NSSA External LSA 3. LSA泛…

Spring Boot 框架介紹及 Spring Boot 與 Spring 實現對比

在日常 Java Web 開發中&#xff0c;Spring 框架幾乎是繞不開的技術體系。傳統的 Spring 項目因其靈活強大而被廣泛應用&#xff0c;但隨著項目規模擴大與業務復雜度提升&#xff0c;XML 配置繁瑣、部署復雜等問題逐漸顯現。為此&#xff0c;Spring Boot 應運而生。 Spring Boo…

基于CNN卷積神經網絡和GEI步態能量提取的視頻人物步態識別算法matlab仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 4.1 GEI步態能量提取 4.2 CNN卷積神經網絡原理 5.算法完整程序工程 1.算法運行效果圖預覽 (完整程序運行后無水印) 2.算法運行軟件版本 matlab2024b/matlab2022a 3.部分核心程序 &…

創建型模式:建造者模式

什么是建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是一種創建型設計模式&#xff0c;它將一個復雜對象的構建過程與其表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示。簡單來說&#xff0c;建造者模式允許您一步一步創建復雜對象&#xff0c;而…

Linux `init 5` 相關命令的完整使用指南

Linux init 5 相關命令的完整使用指南—目錄 一、init 系統簡介二、init 5 的含義與作用三、不同 Init 系統下的 init 5 行為1. SysVinit&#xff08;如 CentOS 6、Debian 7&#xff09;2. systemd&#xff08;如 CentOS 7、Ubuntu 16.04&#xff09;3. Upstart&#xff08;如 …

RabbitMQ常見面試題回答重點

文章目錄 什么是消息隊列&#xff1f;為什么需要消息隊列消息隊列的模型消息隊列常見名詞如何保證消息不丟失&#xff1f;&#xff08;可靠性&#xff09;如何保證消息不重復/業務冪等性如何保證消息有序性如何處理消息堆積消息隊列設計為推送還是拉取 / 推拉模式優點無法路由的…

欣佰特攜數十款機器人相關前沿產品,亮相第二屆人形機器人和具身智能行業盛會

2025年4月15日至16日&#xff0c;備受關注的第二屆中國人形機器人與具身智能產業大會已在北京成功舉行。作為國內前沿科技及產品服務領域的重要參與者&#xff0c;欣佰特科技攜眾多前沿產品精彩亮相&#xff0c;全方位展示了其在人形機器人與具身智能領域的創新產品。 在本次大…

Docker安裝 (centos)

1.安裝依賴包&#xff1a; sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2.刪除已有的 Docker 倉庫文件&#xff08;如果有&#xff09;&#xff1a; sudo rm -f /etc/yum.repos.d/docker-ce.repo 3.添加阿里云的 Docker 倉庫&#xff1a; sudo yum…

Vue接口平臺學習十——接口用例頁面2

效果圖及簡單說明 左邊選擇用例&#xff0c;右側就顯示該用例的詳細信息。 使用el-collapse折疊組件&#xff0c;將請求到的用例詳情數據展示到頁面中。 所有數據內容&#xff0c;綁定到caseData中 // 頁面綁定的用例編輯數據 const caseData reactive({title: "",…

服務器數據遷移指南

服務器數據遷移是將數據從一臺服務器轉移到另一臺服務器的過程&#xff0c;可能是為了硬件升級、云遷移、數據中心搬遷或服務整合。 以下是數據遷移的關鍵步驟和注意事項&#xff1a; 遷移前準備 制定遷移計劃 確定遷移范圍(全量/增量) 評估數據量和網絡帶寬 制定時間表和回…

25.解決中醫知識問答刪除歷史對話功能后端處理請求時拋出異常

ChatTest.vue:176 DELETE http://localhost:8080/api/chat/conversations/20 500 (Internal Server Error) deleteConversation ChatTest.vue:176 onClick ChatTest.vue:22 ChatTest.vue:185 刪除失敗 AxiosError {message: Request failed with status code 500, name: Axio…