Vue 項目中 Excel 導入導出功能筆記

功能概述

該代碼實現了 Vue 項目中 Excel 文件的三大核心功能:

  1. Excel 導入:上傳文件并解析數據,刷新表格展示。
  2. 模板下載:獲取并下載標準 Excel 模板文件。
  3. 數據導出:將表格數據按多級表頭結構導出為 Excel 文件。

一. Excel 導入功能

使用FormData封裝文件數據,支持二進制文件上傳。

通過 API 請求與后端交互,根據響應狀態處理成功 / 失敗邏輯。

const uploadTemp = ref(); // 上傳組件引用
const exportImportHandler = async (files) => {const fileForm = new FormData();fileForm.append('file', files.file); // 封裝文件數據const { code, message } = await ImportExcelApi(fileForm); // 調用上傳APIif (code === 200) {ElMessage.success('導入成功');uploadTemp.value.clearFiles(); // 清空上傳組件getTableList(); // 刷新表格數據} else {ElMessage.error(message);}
};

二. 模板下載功能

通過 API 獲取模板文件的二進制數據(Blob)。

使用downloadfile工具函數將 Blob 轉換為可下載的文件。?

const fileBlob = ref();
const downloadFileTemp = async () => {try {fileBlob.value = await DownloadTemplateAPI(); // 獲取模板數據// 利用LuckyExcel處理Excel文件(可選,根據庫需求)downloadfile({ excelFileName: '儲氣庫排液情況模板.xlsx' }, fileBlob.value);} catch (error) {console.error(error);}
};

三. 數據導出功能

1.調用導出api

const exportHandler = async () => {const headers = []; // 表頭數組(二維數組,代表多級表頭)const columns = []; // 列配置數組realTableColumn.value.forEach(item => {if (item.prop !== "operator") { // 排除操作列if (item.children) {// 處理有子列的情況(三級表頭)item.children.forEach(child => {const header = [];header.push("重點工作安排"); // 一級表頭header.push(item.label);    // 二級表頭header.push(child.label);   // 三級表頭headers.push(header);columns.push({ columnKey: child.prop, columnDict: [] });});} else {// 處理普通列(兩級表頭)const header = [];header.push("重點工作安排"); // 一級表頭for (let i = 0; i < 2; i++) {header.push(item.label); // 二級表頭重復兩次(保持結構一致)}headers.push(header);columns.push({ columnKey: item.prop, columnDict: [] });}}});// 調用導出API并下載const params = { headers, columns, /* 其他參數 */ };const resData = await ExportExcelApi(params);downloadfile(resData, '重點工作安排.xlsx');
};

header.push:用于構建多級表頭的層級結構,將各級表頭名稱按順序存入數組,

最終形成二維數組(如[['一級', '二級', '三級'], ...]),供 Excel 導出工具識別。示例:

const header = [];
header.push("一級表頭");   // 數組變為 ["一級表頭"]
header.push("二級表頭");   // 數組變為 ["一級表頭", "二級表頭"]
header.push("三級表頭");   // 數組變為 ["一級表頭", "二級表頭", "三級表頭"]
headers.push(header);      // 最終存入二維數組 [["一級表頭", "二級表頭", "三級表頭"]]

2.不調用導出api

const dataOut = async () => {try {// 檢查是否有數據可導出if (!tableBody.tableData || tableBody.tableData.length === 0) {ElMessage.warning('沒有數據可導出');return;}// 動態導入xlsx庫const XLSX = await import('xlsx');// 轉換數據格式,將列prop映射為labelconst exportData = tableBody.tableData.map(item => {const row = {};tableColumn.forEach(column => {if (column.prop && column.label) {// 處理嵌套屬性const value = column.prop.split('.').reduce((acc, part) => {return acc && acc[part] !== undefined ? acc[part] : '';}, item);row[column.label] = value;}});return row;});// 創建工作簿和工作表const ws = XLSX.utils.json_to_sheet(exportData);const wb = XLSX.utils.book_new();XLSX.utils.book_append_sheet(wb, ws, '測試數據記錄');// 導出文件const fileName = `測試數據記錄_${new Date().toLocaleDateString()}.xlsx`;XLSX.writeFile(wb, fileName);ElMessage.success('數據導出成功');} catch (error) {console.error('數據導出失敗:', error);ElMessage.error('數據導出失敗,請聯系管理員');}
};

四、接口工具函數

import http from '@/utils/http/index';
export enum Api {ImportExcel = '/dilraba/Dilmurat/imports', // 導入DownloadTemplate = '/dilraba/Dilmurat/downloadTemplate', // 下載模板
}
/** 下載重點工作模板 */
export function DownloadTemplateAPI() {return http.get({url: API.DownloadTemplate,responseType: 'blob'});
}
// 導入
export function ImportExcelApi(data = {}) {return http.post({url: API.ImportExcel,data: data});
}

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

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

相關文章

71. 簡化路徑 —day94

前言&#xff1a; 作者&#xff1a;神的孩子在歌唱 一個算法小菜雞 大家好&#xff0c;我叫智 71. 簡化路徑 給你一個字符串 path &#xff0c;表示指向某一文件或目錄的 Unix 風格 絕對路徑 &#xff08;以 / 開頭&#xff09;&#xff0c;請你將其轉化為 更加簡潔的規范路徑…

Linux系統編程 | 互斥鎖

1、什么是互斥鎖 如果信號量的值最多為 1&#xff0c;那實際上相當于一個共享資源在任意時刻最多只能有一個線程在訪問&#xff0c;這樣的邏輯被稱為“互斥”。這時&#xff0c;有一種更加方便和語義更加準確的工具來滿足這種邏輯&#xff0c;他就是互斥鎖。 “鎖”是一種非常形…

數據文件寫入技術詳解:從CSV到Excel的ETL流程優化

文章大綱&#xff1a; 引言&#xff1a;數據文件寫入在ETL流程中的重要性 在現代數據處理中&#xff0c;ETL&#xff08;提取、轉換、加載&#xff09;流程是數據分析和業務決策的核心環節&#xff0c;而數據文件寫入作為ETL的最后一步&#xff0c;扮演著至關重要的角色。它不…

在Cline中使用Gemini CLI,圖形化界面操作:從命令行到可視化操作的全新體驗,爽炸天!

在軟件開發的進程中&#xff0c;命令行工具雖功能強大&#xff0c;但對部分開發者而言&#xff0c;圖形化界面的直觀與便捷性有著獨特魅力。此前&#xff0c;Cline 新版本集成 Gemini CLI 的消息在開發者社群引發熱議&#xff0c;尤其對于偏好圖形界面的開發者來說&#xff0c;…

正交視圖三維重建 筆記 2d線到3d線

這種代碼怎么寫好&#xff0c;x1tx1 x2tx2 x1x2在一條線上tx2和tx1在一條線上輸出x1 y1 ty1&#xff0c;x2 y2 ty2 線過的點 的集合 俯視圖找深度 測試一下 目標 四條線變一條線 復雜度賊大跑起來賊慢 加了16000條 去重 for (const [x1, y1, x2, y2, lineId, type] of front…

【耳機】IEM 前腔 后腔 泄壓孔 -> 調音紙對頻響曲線的影響

一、后腔 1.曲線說明 綠色&#xff1a;無調音紙 紅色&#xff1a;使用Y3 粉色&#xff1a;使用Y6 2.結論 后腔是負責微調的&#xff0c;阻尼大小和低頻升降成 反比。 阻 大 -> 低頻 降低 阻 小 -> 低頻 升高 二、前腔 1.曲線說明 紅色&#xff1a;無調音紙 黃色&am…

信息安全與網絡安全---引言

僅供參考 文章目錄 一、計算機安全1.1 CIA三元組1.2 影響等級1.3 計算機安全的挑戰 二、OSI安全體系結構2.1 安全攻擊2.2 安全服務2.3 安全機制 三、基本安全設計準則四、攻擊面和攻擊樹&#xff08;重點&#xff09;4.1 攻擊面4.2 攻擊樹 五、習題與答案 一、計算機安全 &…

C# VB.NET取字符串中全角字符數量和半角字符數量

C# VB.NET中Tuple輕量級數據結構和固定長度數組-CSDN博客 https://blog.csdn.net/xiaoyao961/article/details/148872196 下面提供了三種統計字符串中全角和半角字符數量的方法&#xff0c;并進行了性能對比。 性能對比&#xff08;處理 100 萬次 "Hello&#xff0c;世界…

CC++公司面試題[個人總結,持續更新中]

嵌入式初級面試題 姓名: 日期: 開始時間: (答題時間60分鐘,答題過程中請不要上網查詢資料,不可帶走答卷) 1:設float a=2,b=4,c=3;,以下C語言表達式與代數式(a+b)+c計算結果不一致的是( )[3分] A.(a+b)c/2 B. (1/2)*(a+b)c C. (a+b)c*1/2 D.c/2(a+b) 2:為了向二進制文件尾部…

Qt QGraphics簡述及例程 - QGraphicsView、QGraphicsScene和QGraphicsItem

Qt QGraphics簡述及例程 引言一、簡單例程二、關于坐標系問題 引言 QGraphics*是Qt框架中&#xff0c;主要用于處理2D圖形項的顯示、交互和管理的模塊&#xff0c;包括QGraphicsView、QGraphicsScene和QGraphicsItem。提供了一套高效的場景-視圖架構&#xff0c;適合開發復雜的…

代碼隨想錄打卡第一天

文章講解&#xff1a;代碼隨想錄 視頻講解&#xff1a;手把手帶你撕出正確的二分法 | 二分查找法 | 二分搜索法 | LeetCode&#xff1a;704. 二分查找_嗶哩嗶哩_bilibili class Solution { public:int search(vector<int>& nums, int target) {int left0;//左邊界int…

時序數據庫全面解析與對比

文章目錄 1. 時序數據庫概述1.1 時序數據特點1.2 時序數據庫核心功能 2. 主流時序數據庫對比2.1 InfluxDB2.2 Prometheus2.3 TimescaleDB2.4 OpenTSDB2.5 TDengine 3. 全方位對比3.1 功能對比3.2 性能對比3.3 適用場景對比3.4 社區與生態 4. 選型建議4.1 根據數據規模選擇4.2 根…

【STM32CubeMX】ST官網MCU固件庫下載及安裝

用STM32CubeMX自帶的Updater更新固件包會遇到各種幺蛾子&#xff08;如下圖所示&#xff09;&#xff0c;所以干脆自己下載固件包&#xff0c;快速升級固件。 1. ST官網搜索你需要的MCU型號&#xff0c;并選擇需要的固件版本&#xff0c;我這里是H7的MCU所以就找H7&#xff08;…

青少年編程與數學 01-012 通用應用軟件簡介 13 網上學習資源

青少年編程與數學 01-012 通用應用軟件簡介 13 網上學習資源 一、什么是網上學習資源&#xff08;一&#xff09;網上學習資源的基本定義&#xff08;二&#xff09;網上學習資源的工作原理&#xff08;三&#xff09;網上學習資源的類型 二、網上學習資源的重要意義&#xff0…

Python Selenium 忽略證書錯誤

文章目錄 Python Selenium 忽略證書錯誤和忽略&#x1f527; **一、忽略 SSL 證書錯誤**1. **基礎配置&#xff08;適用于 Chrome/Firefox&#xff09;**2. **高級場景&#xff1a;指定證書指紋**3. **瀏覽器兼容方案** &#x1f507; **二、隱藏 DevTools 監聽提示**1. **禁用…

YOLOv8模型在RDK5開發板上的部署指南:.pt到.bin轉換與優化實踐

以下是針對在RDK5開發板(基于NVIDIA Jetson Orin平臺)部署YOLOv8模型的詳細技術指南,涵蓋從模型轉換、優化到部署的全流程: YOLOv8模型在RDK5開發板上的部署指南:.pt到.bin轉換與優化實踐 ——基于TensorRT的高性能嵌入式部署方案 第一章:技術背景與核心概念 1.1 RDK5開…

內網橫向-工作流

一、信息收集階段 操作 工具 / 命令 說明 系統基礎信息采集 systeminfo、whoami /user 查看系統版本、用戶 SID 等 域內用戶 / 組查詢 net user /domain、net group "domain admins" /domain 列出域用戶及管理員組 域控及網絡結構探測 nltest /dsgetdc、ip…

個人日記本小程序開發方案(使用IntelliJ IDEA)

個人日記本小程序開發方案(使用IntelliJ IDEA) 一、項目創建與環境配置 1. 新建項目 打開IDEA → New Project → JavaFX選擇JDK 11+版本添加必要依賴:<!-- pom.xml --> <dependencies><dependency><groupId

react快速開始項目模板

代碼倉庫 gitee 創建項目 首先保證安裝了node, 然后使用vite創建項目 vite npm create vite react-learn cd react-learn npm i 目錄結構 一個完整的前端項目需要: 狀態管理 在全局維護共有的狀態(數據), 讓頁面組件之間共享數據, 我們使用pinia路由 路由讓頁面之間可以…

scrapy+django+pyecharts+mysql 實現西安游客行為分析系統大屏_用戶畫像_空間分析_路線智能推薦

項目地址 link 此處展示部分結果 思路 描述性統計 可視化大屏 用戶畫像&#xff08;聚類&#xff0c;情感分析&#xff09; 空間分析