芋道系统excel导出,springcloud+vue3

news/2024/9/19 18:54:05/ 标签: excel, spring cloud, vue.js

前端代码:

 <el-form-item><el-buttontype="success"plain@click="handleExport":loading="exportLoading"v-hasPermi="['teach:course-manage:export']"><Icon icon="ep:download" class="mr-5px" /> 导出</el-button></el-form-item>/** 导出按钮操作 */
const handleExport = async () => {try {// 导出的二次确认await message.exportConfirm()// 发起导出exportLoading.value = trueconst data = await CourseManageApi.exportCourseManage(queryParams)download.excel(data, '课程管理.xls')} catch {} finally {exportLoading.value = false}
}// 导出课程管理 ExcelexportCourseManage: async (params) => {return await request.download({ url: `/teach/course-manage/export-excel`, params })},
const download0 = (data: Blob, fileName: string, mineType: string) => {// 创建 blobconst blob = new Blob([data], { type: mineType })// 创建 href 超链接,点击进行下载window.URL = window.URL || window.webkitURLconst href = URL.createObjectURL(blob)const downA = document.createElement('a')downA.href = hrefdownA.download = fileNamedownA.click()// 销毁超连接window.URL.revokeObjectURL(href)
}const download = {// 下载 Excel 方法excel: (data: Blob, fileName: string) => {download0(data, fileName, 'application/vnd.ms-excel')},// 下载 Word 方法word: (data: Blob, fileName: string) => {download0(data, fileName, 'application/msword')},// 下载 Zip 方法zip: (data: Blob, fileName: string) => {download0(data, fileName, 'application/zip')},// 下载 Html 方法html: (data: Blob, fileName: string) => {download0(data, fileName, 'text/html')},// 下载 Markdown 方法markdown: (data: Blob, fileName: string) => {download0(data, fileName, 'text/markdown')}
}export default download

后端代码:

  @GetMapping("/export-excel")@Operation(summary = "导出课程管理 Excel")@PreAuthorize("@ss.hasPermission('teach:course-manage:export')")@ApiAccessLog(operateType = EXPORT)public void exportCourseManageExcel(@Valid CourseManagePageReqVO pageReqVO,HttpServletResponse response) throws IOException {pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);List<CourseManageDO> list = courseManageService.getCourseManagePageExportData(pageReqVO).getList();// 导出 ExcelExcelUtils.write(response, "课程管理.xls", "数据", CourseManageExportRespVo.class,BeanUtils.toBean(list, CourseManageExportRespVo.class));}
PageResult<CourseManageDO> getCourseManagePageExportData(CourseManagePageReqVO pageReqVO);
 @Overridepublic PageResult<CourseManageDO> getCourseManagePageExportData(CourseManagePageReqVO pageReqVO) {PageResult<CourseManageDO> courseManageDOPage = courseManageMapper.selectPage(pageReqVO);List<CourseManageDO> list = courseManageDOPage.getList();for (CourseManageDO courseManageDO : list) {if(courseManageDO.getCourseType() == null){courseManageDO.setCourseTypeName("");}else {CommonResult<DictDataRespDTO> dictDataRespDTO = dictDataApi.getDictData("course_type", String.valueOf(courseManageDO.getCourseType()));courseManageDO.setCourseTypeName(dictDataRespDTO.getData().getLabel());}if(courseManageDO.getGrade() == null){courseManageDO.setGradeName("");}else{CommonResult<DictDataRespDTO> dictDataRespDTO2 = dictDataApi.getDictData("grade", String.valueOf(courseManageDO.getGrade()));courseManageDO.setGradeName(dictDataRespDTO2.getData().getLabel());}if(courseManageDO.getTerm() == null){courseManageDO.setTermName("");}else{CommonResult<DictDataRespDTO> dictDataRespDTO3 = dictDataApi.getDictData("term", String.valueOf(courseManageDO.getTerm()));courseManageDO.setTermName(dictDataRespDTO3.getData().getLabel());}courseManageDO.setCreatorName(adminUserMapper.selectOne(AdminUserDO::getId, Integer.valueOf(courseManageDO.getCreator())).getNickname());}return courseManageDOPage;}
package com.todod.education.module.teach.controller.admin.coursemanage.vo;import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;
import java.math.BigDecimal;
import java.time.LocalDateTime;@Schema(description = "管理后台 -  课程管理 Response VO")
@Data
@ExcelIgnoreUnannotated
@ToString(callSuper = true)
public class CourseManageExportRespVo  {@Schema(description = "课程名称", example = "王五")@ExcelProperty("课程名称")private String courseName;@Schema(description = "课程类型", example = "1")@ExcelProperty("课程类型")private String courseTypeName;@Schema(description = "定价")@ExcelProperty("定价")private BigDecimal priceStandard;@Schema(description = "年级")@ExcelProperty("年级")private String gradeName;@Schema(description = "学期")@ExcelProperty("学期")private String  termName;@Schema(description ="创建人")@ExcelProperty("创建人")private String creatorName;@Schema(description = "创建时间")@ExcelProperty("创建时间")private LocalDateTime createTime;}
package com.todod.education.framework.excel.core.util;import com.todod.education.framework.excel.core.handler.SelectSheetWriteHandler;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.converters.longconverter.LongStringConverter;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;/*** Excel 工具类** @author admin*/
public class ExcelUtils {/*** 将列表以 Excel 响应给前端** @param response  响应* @param filename  文件名* @param sheetName Excel sheet 名* @param head      Excel head 头* @param data      数据列表哦* @param <T>       泛型,保证 head 和 data 类型的一致性* @throws IOException 写入失败的情况*/public static <T> void write(HttpServletResponse response, String filename, String sheetName,Class<T> head, List<T> data) throws IOException {// 输出 ExcelEasyExcel.write(response.getOutputStream(), head).autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 基于 column 长度,自动适配。最大 255 宽度.registerWriteHandler(new SelectSheetWriteHandler(head)) // 基于固定 sheet 实现下拉框.registerConverter(new LongStringConverter()) // 避免 Long 类型丢失精度.sheet(sheetName).doWrite(data);// 设置 header 和 contentType。写在最后的原因是,避免报错时,响应 contentType 已经被修改了response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, StandardCharsets.UTF_8.name()));response.setContentType("application/vnd.ms-excel;charset=UTF-8");}public static <T> List<T> read(MultipartFile file, Class<T> head) throws IOException {return EasyExcel.read(file.getInputStream(), head, null).autoCloseStream(false)  // 不要自动关闭,交给 Servlet 自己处理.doReadAllSync();}}


http://www.ppmy.cn/news/1523959.html

相关文章

【mysql】mysql之主从延迟复制测试场景

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

当水泵遇上物联网:智能水务新时代的浪漫交响

在当代科技的宏伟乐章中&#xff0c;物联网&#xff08;IoT&#xff09;技术宛如一位技艺高超的指挥家&#xff0c;引领着各行各业迈向智能化的新纪元。当这股创新浪潮涌向古老的水务行业时&#xff0c;一场前所未有的“智能水务”革命便悄然上演&#xff0c;而水泵——这一传统…

小宝宝的好伙伴Baby Buddy

好友 Eduna 前天半夜告诉我&#xff0c;Docker 的下载已经恢复&#xff0c;又可以愉快的玩耍了&#xff0c;大家赶紧去试试吧~ 什么是 Baby Buddy &#xff1f; Baby Buddy 是宝宝的好伙伴&#xff01;能帮助宝爸、宝妈、及护理人员跟踪宝宝的睡眠、喂食、换尿布、趴着的时间等…

【Linux】循序进阶学运维-服务篇-tomcat入门

[rootgaosh-1 jdk]# ##### []( )2\. 配置java环境\[rootgaosh-1 jdk\]# vim /etc/profile![在这里插入图片描述](https://img-blog.csdnimg.cn/20200801062552258.png)export JAVA_HOME/root/jdk/jdk1.8.0_131 ## 路径一定要对 export PATH J A V A H O M E / b i n : JAVA_HO…

Collections

Collections 是 Java 中的一个实用工具类&#xff0c;提供了一系列静态方法来操作集合。以下是其详细介绍&#xff1a; 前置知识 在 Java 中&#xff0c;可变参数&#xff08;Varargs&#xff09;允许方法接受可变数量的参数。使用可变参数时&#xff0c;可以传递任意数量的参…

EmguCV学习笔记 C# 11.3 DNN其它

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

Python Web 框架篇:Flask、Django、FastAPI介绍及其核心技术

Python Web 框架篇&#xff1a;Flask、Django、FastAPI介绍及其核心技术 目录 &#x1f40d; Flask Flask 核心概念&#xff08;路由、视图函数、模板渲染&#xff09;Flask Blueprint 模块化应用Flask 扩展&#xff08;Flask-SQLAlchemy、Flask-WTF、Flask-Migrate 等&#…

Centos7.9部署Gitlab-ce-16.9

一、环境信息 软件/系统名称版本下载地址备注Centos77.9.2009https://mirrors.nju.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.isogitlab-cegitlab-ce-16.9.1https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.9.1-ce.0.el7.x86_64.rpm…

半监督学习能否帮助训练更好的模型?

数据科学家面临的最常见挑战之一是缺乏足够的标记数据来训练一个可靠且准确的模型。标记数据对于监督学习任务&#xff0c;如分类或回归至关重要。然而&#xff0c;在许多领域&#xff0c;获取标记数据既昂贵又耗时&#xff0c;有时甚至是不切实际的。另一方面&#xff0c;未标…

CSS学习18--伸缩布局

伸缩布局 一、伸缩布局二、属性设置 一、伸缩布局 给父级display: flex; 给孩子flex: 1; 自由变动 <html><head><style>section {width: 1000px;height: 200px;border:1px solid pink;margin:100px auto;/*父级盒子添加f1ex*/dispLay:flex;/*伸缩布局模式*/…

HW | AMD GPU上 “nvidia-smi -lms” 的等价指令——MI300X实时查看GPU使用率

文章目录 .实验背景.nvidia-smi -lms.rocm-smi 等价指令.结语. . 实验背景 最近在使用AMD MI300X GPU进行实验&#xff0c;MI300X是目前AMD最先进的几款数据中心GPU之一。该GPU的软件指令和NVIDIA的不同&#xff0c;主要因为底层的驱动命名不同&#xff08;在我理解确实是这样…

小型洗衣机什么牌子好又便宜?五款备受好评机型测评,闭眼入

在日常生活中&#xff0c;内衣洗衣机已成为现代家庭必备的重要家电之一。选择一款耐用、质量优秀的内衣洗衣机&#xff0c;不仅可以减少洗衣负担&#xff0c;还能提供高效的洗涤效果。然而&#xff0c;市场上众多内衣洗衣机品牌琳琅满目&#xff0c;让我们往往难以选择。那么&a…

HarmonyOs 应用基础--Swiper-样式结构重用-GridGridItem

目录 九、Swiper-样式&结构重用-Grid&GridItem 1. Swiper 1.1. 适用场景 1.2. 基本用法 1.3. 常用属性方法 1.4. 调整导航点 1.5. 案例-小米有品 2. 样式&结构重用 2.1. Styles 2.2. Extend 2.3. Builder 2.4. Extend、Styles、Builder 对比 3. 网格布…

opencv图像透视处理

引言 在图像处理与计算机视觉领域&#xff0c;透视变换&#xff08;Perspective Transformation&#xff09;是一种重要的图像校正技术&#xff0c;它允许我们根据图像中已知的四个点&#xff08;通常是矩形的四个角&#xff09;和目标位置的四个点&#xff0c;将图像从一个视…

C语言---循环程序设计万字总结(2)

选择、循环结构 最简单的结构是 if-else &#xff08;类比日常生活中 如果…否则…&#xff09; 其次&#xff0c; switch&#xff0c; 最后是三大循环结构&#xff0c; while do-while for 选择、循环结构是后续学习的基石&#xff0c; 尤其是与数组和指针 关联性很强 一、选…

Python\Scripts文件夹中只有pip3.exe而缺少pip.exe

解决办法&#xff1a; 以管理员身份运行命令提示符 执行如下命令 mklink D:\Python\Scripts\pip.exe D:\Python\Scripts\pip3.exe&#xff08;命令中的路径应填入你的Python安装路径&#xff0c;并且Python\Scripts路径也正常放入系统变量中&#xff09; 然后就可以检查你的…

美团面试题:生成字符串的不同方式

美团面试题:生成字符串的不同方式 引言问题分析动态规划思路伪代码C代码实现代码解析复杂度分析优化建议结论引言 小红拿到了一个空字符串 s s s,她希望通过两种操作生成一个给定的字符串 t t t。我们需要计算生成字符串

springboot项目编写发送异常日志到企微工具包

1.创建基础Bean public final class ThreadFactory implements java.util.concurrent.ThreadFactory {private static final AtomicInteger poolNumber new AtomicInteger(1);private final ThreadGroup group;private final AtomicInteger threadNumber new AtomicInteger(1…

学校不会教的找工作信息差,靠谱招聘网站分享给你

1、国家大学生就业服务平台 2、中国公共招聘网 3、中国国家人才网

机器学习 第10章 降维与度量学习

目录 k近邻学习低维嵌入主成分分析&#xff08;PCA&#xff09;核化线性降维&#xff08;KPCA&#xff09;流形学习等度量映射&#xff08;Isomap&#xff09;局部线性嵌入 度量学习 k近邻学习 k 近邻&#xff08;KNN&#xff09;学习是一种常用的监督学习方法&#xff0c;其工…