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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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; 空间分析