SpringBoot实现Excel解析和下载

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 写作原因 操作Excel一般有三种poi、EasyExcel和Hutool工具包,百度一下你会发现大多数写的不是很清晰,所以此处写一个demo,方便自己以后copy。此处是基于Hutool实现的。

源码下载(亲测可用)


ChaiRongD/Demooo - Gitee.com


部分代码展示


pom


<!-- hutool-all -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.6.5</version>
        </dependency>
        <!-- zxingcore -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.4.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>


CExcelUtil自定义的工具类


package com.example.springbootexceldemo.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map.Entry;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
/**
 * Created on 2021-06-04
 */
public class CExcelUtil {
    /**
     * 解析Excel
     *
     * @param file 文件
     * @param startRow 第几行开始
     */
    public static List<List<Object>> explainExcel(File file, Integer startRow) throws Exception {
        InputStream inputStream = new FileInputStream(file);
        List<List<Object>> lists = explainExcel(inputStream, startRow);
        return lists;
    }
    /**
     * 解析Excel
     *
     * @param inputStream 文件输入流
     * @param startRow 第几行开始
     */
    public static List<List<Object>> explainExcel(InputStream inputStream, Integer startRow) throws Exception {
        ExcelReader reader = ExcelUtil.getReader(inputStream);
        List<List<Object>> data = reader.read(startRow);
        return data;
    }
    /**
     * 构建Excel
     *
     * @param headers 表头和对象属性的对应关系
     * @param dataList 实体类集合
     * 注意:
     * 1)dataList传入Object ,List<Object> list.add(new Student())
     * 2) dataList最少为一个空对象,否则出现表头为空的问题,他是根据对象属性添加表头,没有对象就没有表头
     * 3)参考MovePersonItemServiceImpl###exportItems的使用方法
     */
    public static ExcelWriter getExcelWriter(LinkedHashMap<String, String> headers, List<Object> dataList) {
        // 准备将数据集合封装成Excel对象
        ExcelWriter writer = ExcelUtil.getWriter(true);
        //添加标题
        for (Entry<String, String> stringStringEntry : headers.entrySet()) {
            writer.addHeaderAlias(stringStringEntry.getKey(), stringStringEntry.getValue());
        }
        //写入数据
        writer.write(dataList, true);
        return writer;
    }
}


控制层


package com.example.springbootexceldemo.controller;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.example.springbootexceldemo.entity.Student;
import com.example.springbootexceldemo.utils.CExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
/**
 * Created on 2021-06-04
 */
@RestController
public class ExcelController {
    //resources/file/demo-explan.xlsx
    @PostMapping("/explainExcel")
    public Object explainExcel(@RequestPart("file") MultipartFile file) throws Exception {
        if (file.isEmpty()) {
            System.out.println("empty");
            return 0;
        }
        //解析Excel
        List<List<Object>> datas = CExcelUtil.explainExcel(file.getInputStream(), 1);
        return datas;
    }
    @GetMapping("/downExcel")
    public void explainExcel(HttpServletResponse response) throws Exception {
        //查询数据库
        Student student = new Student(1, "张三", new Date());
        Student student2 = new Student(2, "李四", new Date());
        List<Object> datas = new ArrayList<>();
        datas.add(student);
        datas.add(student2);
        //设置对象属性和表头的对应关系
        LinkedHashMap headers = new LinkedHashMap<>();
        headers.put("id", "中文名");
        headers.put("name", "邮箱前缀");
        headers.put("birthday", "部门名");
        //创建Excel
        ExcelWriter writer = CExcelUtil.getExcelWriter(headers, datas);
        //设置response属性
        String name = "汉字";
        response.setContentType("application/ms-excel;charset=UTF-8");
        response.setHeader("Content-Disposition",
                String.format("attachment;filename=%s", URLEncoder.encode(name, "UTF-8") + ".xlsx"));
        ServletOutputStream out = response.getOutputStream();
        writer.flush(out, true);
        //关闭流
        writer.close();
        out.close();
    }
}


实体类


package com.example.springbootexceldemo.entity;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * Created on 2021-06-04
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private Integer id;
    private String name;
    private Date birthday;
}
目录
相关文章
|
3月前
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
262 0
|
3月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
256 2
|
5天前
|
人工智能 搜索推荐 API
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
cobalt 是一款开源的流媒体下载工具,支持全平台视频、音频和图片下载,提供纯净、简洁无广告的体验
107 9
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
|
5天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
53 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
2月前
|
前端开发 Java Maven
深入解析:如何用 Spring Boot 实现分页和排序
深入解析:如何用 Spring Boot 实现分页和排序
62 2
|
2月前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
134 8
|
3月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
3月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
87 2

推荐镜像

更多