当前位置: 首页 > news >正文

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.lqws.cn/news/560233.html

相关文章:

  • 开疆智能CCLinkIE转ModbusTCP网关连接傲博机器人配置案例
  • 道路交通标志检测数据集-智能地图与导航 交通监控与执法 智慧城市交通管理-2,000 张图像
  • 鸿蒙5:ArkTS基本介绍
  • Ubuntu20.04离线安装Realtek b852无线网卡驱动
  • Note2.2 机器学习训练技巧:Batch and Momentum(Machine Learning by Hung-yi Lee)
  • vue-29(创建 Nuxt.js 项目)
  • 创客匠人视角:创始人 IP 打造为何成为知识变现的核心竞争力
  • electron中显示echarts
  • 微机系统 第八章 模拟接口
  • Windows 合并多个txt到一个txt文件中 (txt文件的合并与拆分)
  • 【Go语言-Day 10】深入指针应用:解锁函数“引用传递”与内存分配的秘密
  • 如何让ChatGPT模仿人类写作,降低AIGC率?
  • 设计模式-代理模式、装饰者模式
  • [Java 基础]LinkedList
  • 告别脚本!用浏览器为 AWS CLI 实现真正的 Cognito 单点登录
  • 基于Spring Boot的网上购物平台设计与实现
  • 【软考--软件设计师】10.2 关系型数据库
  • 网络安全体系结构和安全防护
  • Linux内核网络协议栈深度解析:面向连接的INET套接字实现
  • 【AI实践】Mac一天熟悉AI模型智能体应用(百炼版)
  • 前端React和Vue框架的区别
  • Spring AI Alibaba 入门指南:打造企业级 AI 应用
  • 全面拥抱vue3
  • 编译安装交叉工具链 riscv-gnu-toolchain
  • 鸿蒙 Scroll 组件深度解析:丝滑滚动交互全场景实现
  • uni-app项目实战笔记26--uniapp实现富文本展示
  • 中国农村统计年鉴-Excel版(1985-2024年)
  • 机器学习框架(1)
  • c#激光设备行业ERP软件进销存软件库存管理软件财务管理软件
  • kubernetes部署3节点高可用elasticsearch v8.14.3