Excel文件生成与下载(SpringBoot项目)(easypoi)

news2025/2/26 20:01:55

说明

通过接口,导出表格。

使用SpringBoot框架和easypoi表格解析框架,生成Excel表格,并通过接口下载。

表格示例

在这里插入图片描述

依赖

版本

<easypoi.version>4.4.0</easypoi.version>

依赖

<!-- easypoi -->
<dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-base</artifactId>
        <version>${easypoi.version}</version>
</dependency>
<dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-web</artifactId>
        <version>${easypoi.version}</version>
</dependency>
<dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-annotation</artifactId>
        <version>${easypoi.version}</version>
</dependency>

代码

Controller

package com.example.service;

import com.example.service.UserExcelService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@RestController
@RequestMapping("file")
@Api(tags = "文件")
public class FileController {

    @Autowired
    private UserExcelService userExcelService;


    @GetMapping("export/user_excel")
    @ApiOperation("导出用户列表(Excel表格,以附件形式下载)")
    public void exportUserExcel(HttpServletResponse response) throws IOException {
        userExcelService.downloadUserExcel(response);
    }

}

Service

package com.example.service;

import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.example.data.excel.UserExcel;
import com.example.db.entity.UserEntity;
import com.example.util.FileUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@Service
public class UserExcelService {


    public void downloadUserExcel(HttpServletResponse response) throws IOException {
        // 获取用户表格对象列表
        List<UserExcel> userExcelList = listUserExcel();
        // 获取表格下载的输出流
        OutputStream outputStream = FileUtil.getExcelOutputStream("用户列表.xlsx", response);
        // 导出表格
        ExcelExportUtil.exportExcel(new ExportParams("用户列表(抬头)", "sheet"), UserExcel.class, userExcelList).write(outputStream);
    }


    /**
     * 获取用户表格对象列表
     */
    private List<UserExcel> listUserExcel() {
        List<UserEntity> userEntities = listUserEntity();

        // 将查询出来的 数据库Entity,转换为 Excel实体 。
        return userEntities.stream().map(item -> {
            UserExcel vo = new UserExcel();
            BeanUtils.copyProperties(item, vo);
            return vo;
        }).collect(Collectors.toList());
    }


    /**
     * 模拟从数据库查询出数据列表。
     */
    private List<UserEntity> listUserEntity() {
        UserEntity user1 = new UserEntity();
        user1.setId("1");
        user1.setName("张三");
        user1.setAccount("zhangsan");
        user1.setPassword("123456");
        user1.setAge(25);
        user1.setEmail("zhangsan@example.com");
        user1.setStatus(1);
        user1.setRemark("VIP客户");

        UserEntity user2 = new UserEntity();
        user2.setId("2");
        user2.setName("李四");
        user2.setAccount("lisi");
        user2.setPassword("111222");
        user2.setAge(28);
        user2.setEmail("lisi@example.com");
        user2.setStatus(2);
        user2.setRemark("客户已禁用");

        return Stream.of(user1, user2).collect(Collectors.toList());
    }


}

表格实体

package com.example.data.excel;

import cn.afterturn.easypoi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import lombok.Data;

/**
 * 用户信息-Excel对象;
 *
 * @author : songguanxun
 * @date : 2023-9-8
 */
@Data
@ApiModel(value = "用户-Excel对象")
public class UserExcel {

    @Excel(name = "姓名", orderNum = "1", width = 30)
    private String name;

    @Excel(name = "账号", orderNum = "2", width = 30)
    private String account;

    @Excel(name = "年龄", orderNum = "3", width = 20)
    private Integer age;

    @Excel(name = "电子邮箱", orderNum = "4", width = 30)
    private String email;

    @Excel(name = "账号状态", orderNum = "5", replace = {"启用_1", "禁用_2"}, width = 20)
    private Integer status;

    @Excel(name = "备注", orderNum = "6", width = 50)
    private String remark;

}

数据库实体

package com.example.db.entity;

import lombok.Data;

/**
 * 用户
 *
 * @author : songguanxun
 * @date : 2023-9-8
 */
@Data
public class UserEntity {

    private String id;

    private String name;

    private String account;

    private String password;

    private Integer age;

    private String email;

    private Integer status;

    private String remark;

}

文件工具类

package com.example.util;

import com.example.enumeration.ContentDispositionEnum;
import org.springframework.http.HttpHeaders;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;

/**
 * 文件工具类
 */
public class FileUtil {

    /**
     * 获取表格下载的输出流
     *
     * @param fileName 文件名
     * @param response 接口响应对象
     * @return 输出流
     */
    public static OutputStream getExcelOutputStream(String fileName, HttpServletResponse response) throws IOException {
        String fileNameEncoded = URLEncoder.encode(fileName, "UTF-8");
        response.setHeader(HttpHeaders.CONTENT_DISPOSITION, ContentDispositionEnum.ATTACHMENT.getCode() + ";fileName=" + fileNameEncoded);
        return response.getOutputStream();
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/990605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab图像处理之Lee滤波器

目录 一、前言:二、LEE滤波器2.1 LEE滤波器原理2.2 LEE滤波器实现步骤三、MATLAB代码示例一、前言: LEE滤波器是一种常用于合成孔径雷达(SAR)图像去噪的滤波器。它能增强图像的局部对比度。今天我们将通过MATLAB来实现这种滤波器。 二、LEE滤波器 2.1 LEE滤波器原理 LEE滤…

Linux Debian12将本地项目上传到码云(gitee)远程仓库

一、注册码云gitee账号 这个可以参考其他教程&#xff0c;本文不做介绍。 gitee官网&#xff1a;https://gitee.com/ 二、Linux Debian12安装git 如果Linux系统没有安装git&#xff0c;可以使用下面命令安装git sudo apt install git 三、gitee新建仓库 我这只做测试&…

关于el-date-picker组件修改输入框以及下拉框的样式

因为业务需求&#xff0c;从element plus直接拿过来的组件样式和整体风格不搭&#xff0c;所以要修改样式&#xff0c;直接deep修改根本不生效&#xff0c;最后才发现el-date-picker组件有一个popper-class属性&#xff0c;通过这个属性我们就能够修改下拉框的样式&#xff0c;…

SpringMVC之CRUD(直接让你迅速完成部署)

一、项目创建 首先创建一个基于maven的项目部署&#xff0c;如果有些插件没有的话可以参考mybatis入门Idea搭建 二、配置依赖导入 依赖导入 1、pom.xml 需要根据自己的文件来进行导入&#xff0c;并不是原本照着导入 <project xmlns"http://maven.apache.org/POM/4.0.0…

安防视频监控平台EasyCVR可视化管理平台助力森林公园安全

EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等&#xff0c;视频智能分析平台EasyCVR融合性强、开放度高、部署轻快&#xff0c;在智慧工地、智慧园区…

macOS Ventura 13.5.2(22G91)发布,附黑/白苹果镜像下载地址

系统介绍&#xff08;下载请百度搜索&#xff1a;黑果魏叔&#xff09; 黑果魏叔 9 月 8 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5.2 更新&#xff08;内部版本号&#xff1a;22G91&#xff09;&#xff0c;本次更新距离上次发布隔了 21 天。 本次更新查…

【备忘】清理Office缓存

【背景】电脑安装了M365 Apps for enterprise的客户端&#xff0c;遇到不常见的奇怪问题。尝试看清理缓存是否可以解决。 【清理步骤】 1. 关闭所有Office365 应用&#xff1b; 2. 搜索 %AppData% &#xff0c;并打开该文件夹&#xff1b; 3. 进到 AppData > Local > M…

单片机控制直流电机

硬件电路 芯片 单片机的GPIO不能直接连接电机&#xff0c;IO的电流不够或者会烧坏芯片&#xff0c;需要连接一个驱动芯片 &#xff0c;ULN2003 是输入高&#xff0c;输出为低 ULN2003 要输出高电平&#xff0c;必须在输出口外接上拉电阻&#xff0c;所以 将 ULN2003 的 2 个输…

UMA 2 - Unity Multipurpose Avatar☀️四.UMA人物部位的默认颜色和自定义(共享)颜色

文章目录 🟥 人物颜色介绍1️⃣ 使用默认颜色2️⃣ 使用自定义颜色🟧 UMA自定义颜色的作用🟨 自定义颜色还可作为共享颜色🟥 人物颜色介绍 UMA不同部位的颜色分为默认的内置颜色和我们新定义的颜色. 1️⃣ 使用默认颜色 比如不勾选UseSharedColor时,使用的眼睛的默认…

uni-app 之 uni.request 网络请求API接口

uni-app 之 uni.request 网络请求API接口 image.png <template><!-- vue2的<template>里必须要有一个盒子&#xff0c;不能有两个&#xff0c;这里的盒子就是 view--><view>--- uni.request 网络请求API接口 ---<view><!-- 免费的测试接口 --…

iOS左对齐自动换行collection样式

前言 想必大家工作中或多或少会遇到下图样式的UI需求吧 像这种cell长度不固定&#xff0c;以此向右对齐排列的样式UI可以说是很常见的 实现方式 一般的实现可能主要是分一下两种&#xff1a; 1、一种是用button依次排列实现&#xff0c;动态计算text宽度&#xff0c;记录之…

【数据结构初阶】二、 线性表里的顺序表

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【数据结构初阶】一. 复杂度讲解_高高的胖子的博客-CSDN博客 1 . 线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实…

Top 15 开源3D分子蛋白质建模与渲染软件

如今&#xff0c;WebGL 是一种趋势技术&#xff0c;因为它允许开发人员使用现代浏览器作为客户端来创建复杂的 3D 交互式图形、游戏&#xff0c;而无需安装额外的插件、扩展或软件。 WebGL允许浏览器直接与GPU&#xff08;图形处理单元&#xff09;一起工作。 推荐&#xff1a;…

Java中使用JTS实现WKT字符串读取转换线、查找LineString的list中距离最近的线、LineString做缓冲区扩展并计算点在缓冲区内的方位角

场景 Java中使用JTS对空间几何计算(读取WKT、距离、点在面内、长度、面积、相交等)&#xff1a; Java中使用JTS对空间几何计算(读取WKT、距离、点在面内、长度、面积、相交等)_jts-core_霸道流氓气质的博客-CSDN博客 JavaGeoTools实现WKT数据根据EPSG编码进行坐标系转换&…

分布式、锁、延时任务

1. redission 2.zk 2.1 指令 ls / / 下有哪些子节点 get /zookeeper 查看某个子节点内容 create /aa “test” delete /aa set /aa “test01” 2.2 创建节点 模式 默认创建永久 create -e 创建临时 create -e /zz “hello zz” create -s 创建 有序节点 create -s -e 临…

测试平台项目部署一(手动部署)

手动部署 一、项目框架图1、首先创建一个桥接网络:2、redis3、启动mariadb4、跨域配置5、JWT配置6、celery配置7、启动ck14_django 容器8、安装gunicorn9、数据库迁移10、创建用户11、添加工作进程12、验证异步执行任务、定时执行任务通过二、supervisor1、安装2、创建配置文件…

开源|HDR-ISP开源项目介绍

引言 拖更很久了&#xff0c;本着出品必精的原则&#xff0c;我们更新就来点干货。想起刚入行时&#xff0c;网上并没有很多以及系统的ISP的学习资料&#xff0c;都是边工作、边搜集资料然后边学习&#xff0c;一路坎坎坷坷走到今天算是刚入了ISP的大门。 为了解决新人入门的…

openGauss学习笔记-63 openGauss 数据库管理-资源池化架构

文章目录 openGauss学习笔记-63 openGauss 数据库管理-资源池化架构 openGauss学习笔记-63 openGauss 数据库管理-资源池化架构 本文档主要介绍资源池化架构下的一些最佳实践和使用注意事项&#xff0c;用于支撑对相关特性感兴趣的开发者可以快速部署、实践或进行定制化开发。…

【时空融合:改进MRA】

Multiresolution Analysis Pansharpening Based on Variation Factor for Multispectral and Panchromatic Images From Different Times &#xff08;基于变化因子的多光谱和全色图像多分辨率分析&#xff09; 大多数泛锐化方法是将同一区域上同时获取的原始低分辨率多光谱(M…

Redis的数据持久化方案

目录 前言 RDB方式 概述&#xff1a; 1.RDB手动 &#xff12;.RDB自动 RDB优缺点 AOF方式 概述 AOF写数据的三种策略 AOF相关配置 AOF重写 AOF重写方式 手动重写 bgrewriteaof 自动重写 总结 前言 Redis是一个内存型数据库&#xff0c;也就是说如果不将内存中的…