SpringBoot中 Excel的下载

一.搭建好好你的springBoot项目

需要的依赖

	<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.0</version>
        </dependency>

二.开始配置

2.1 Mybatis的写法

2.1.1 实体类

用到的注解
@ExcelProperty(“职位编号”) 对字段进行注解,即导出的excel的目录一栏
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “Asia/Shanghai”) 日期格式注解
@TableId(value = “id”, type = IdType.AUTO) 标注表的主键

关键

Serializable 开启流的接口
private static final long serialVersionUID = 1L;相关的配置

package com.huang.vhr.framework.web.entity;

import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 *
 * </p>
 *
 * @author 张三
 * @since 2022-05-17
 */
public class Position implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    @ExcelProperty("职位编号")
    private Integer id;

    /**
     * 职位
     */
    @ExcelProperty("职位名称")
    private String name;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    @ExcelProperty("创建时间")
    private LocalDateTime createDate;

    @ExcelProperty("是否启用")
    private Boolean enabled;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public LocalDateTime getCreateDate() {
        return createDate;
    }

    public void setCreateDate(LocalDateTime createDate) {
        this.createDate = createDate;
    }

    public Boolean getEnabled() {
        return enabled;
    }

    public void setEnabled(Boolean enabled) {
        this.enabled = enabled;
    }

    @Override
    public String toString() {
        return "Position{" +
                "id=" + id +
                ", name=" + name +
                ", createDate=" + createDate +
                ", enabled=" + enabled +
                "}";
    }

}

2.1.2 Controller层

  @GetMapping("/export")
    public void download(HttpServletResponse response) throws IOException {
        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = URLEncoder.encode("职位数据", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), Position.class).sheet("职位信息").doWrite(positionService.getAllpp());
    }

2.1.3 service层

service
List<Position> getAllpp();



serviceImpl
 @Override
    public List<Position> getAllpp() {
        List<Position> positions = positionMapper.selectPageInfo();
        return positions;
    }

2.2 Mybatis-plus的写法

其实没有什么不同,只是controller的实现分页方法中的sql查询用了mybatis-plus的写法而已

2.2.1 实体类

package com.huang.vhr.framework.web.entity;

import java.io.Serializable;
import java.util.Date;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@ToString
@NoArgsConstructor
public class Employeeremove implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     *
     */
    @TableId(value = "id", type = IdType.AUTO)
    @ExcelProperty("调动编号")
    private Integer id;

    /**
     *
     */

    @ExcelProperty("调动与主表关联")
    private Integer eid;

    /**
     * 调动后部门
     */
    @ExcelProperty("调动后部门")
    private Integer afterDepId;

    /**
     * 调动后职位
     */
    @ExcelProperty("调动后职位")
    private Integer afterJobId;

    /**
     * 调动日期
     */
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
    @ExcelProperty("调动日期")
    private Date removeDate;

    /**
     * 调动原因
     */
    @ExcelProperty("调动原因")
    private String reason;

    /**
     *
     */
    @ExcelProperty("调动评语")
    private String remark;
}


2.2.2 controller层

   @GetMapping("/export")
    public void download(HttpServletResponse response) throws IOException {
        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = URLEncoder.encode("职位数据", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), Employeeremove.class).sheet("职位信息").doWrite(employeeremoveService.list());
    }

2.2.3

service层

service
 {
public interface EmployeeremoveService extends IService<Employeeremove> {
}


serviceImpl
@Service
public class EmployeeremoveServiceImpl extends ServiceImpl<EmployeeremoveMapper, Employeeremove> implements EmployeeremoveService {
}

注意:

1.postman这种测试工具测试excel下载是可以成功的,但是没办法进行下载
2.想要下载拿到文件的话你要通过浏览器
3.excel下载的时候一定会涉及到权限的问题,怎么处理这个权限要考虑好,否则会报错

在这里插入图片描述
例如黄黄这里是把动态权限关掉了,然后配了一个放行。

下载成功excel浏览图

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 提供了很多库来生成 Excel 文件并下载。以下是一些生成 Excel 文件并下载的步骤: 1. 添加依赖 在 pom.xml 文件添加以下依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 这些依赖是 Apache POI 库,它提供了 Java 操作 Microsoft Office 格式的工具。 2. 创建 Excel 文件 创建一个 Excel 文件并填充数据。以下是一个简单的例子: ``` Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // Create a header row Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("Name"); headerRow.createCell(1).setCellValue("Age"); // Create some data rows Row dataRow1 = sheet.createRow(1); dataRow1.createCell(0).setCellValue("John"); dataRow1.createCell(1).setCellValue(25); Row dataRow2 = sheet.createRow(2); dataRow2.createCell(0).setCellValue("Jane"); dataRow2.createCell(1).setCellValue(30); ``` 这个例子创建了一个名为 "Sheet1" 的 Excel 表格,并填充了两行数据。 3. 将 Excel 文件转换为字节数组 将 Excel 文件转换为字节数组,以便在下载文件时使用。以下是一个简单的例子: ``` ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); workbook.write(outputStream); byte[] bytes = outputStream.toByteArray(); ``` 这个例子将 Excel 文件写入 ByteArrayOutputStream ,并使用 toByteArray() 方法将其转换为字节数组。 4. 创建下载链接 创建一个下载链接,以便用户可以下载生成的 Excel 文件。以下是一个简单的例子: ``` @GetMapping("/download") public ResponseEntity<byte[]> download() { // Generate the Excel file Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // ... // Convert the Excel file to a byte array ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); workbook.write(outputStream); byte[] bytes = outputStream.toByteArray(); // Create a HttpHeaders object to set the Content-Disposition header HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", "data.xlsx"); // Return the byte array as a ResponseEntity return new ResponseEntity<>(bytes, headers, HttpStatus.OK); } ``` 这个例子创建了一个名为 "/download" 的 GET 请求处理程序,它生成 Excel 文件并将其转换为字节数组。然后,它创建了一个 HttpHeaders 对象,设置 Content-Disposition 头以指示浏览器下载文件。最后,它将字节数组包装在 ResponseEntity 并返回。 现在,当用户访问 "/download" 链接时,会下载生成的 Excel 文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值