Springboot整合easyExcel

2023-11-04

介绍

平时工作中,我们经常都会用到excel文件上传或者下载的问题,比如将表数据导出为excel表格或者进行数据导入数据库等,本篇我们就介绍一下easyExcel进行操作Excel进行web的上传或者下载。

快速开始

<!-- 引入easyexcel依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.1.1</version>
</dependency>

Entity实体类

上传Excel的每个表格对应一行的一个cell,使用注解@ExcelProperty进行标注标题。

/**
 * 列信息实体类
 */
@Data
@TableName("ColumnEntity")
public class ColumnEntity {
    @TableId(value = "column_id", type = IdType.AUTO)
    @ExcelProperty(value="序号")
    private String columnId;
    //列名
    @ExcelProperty(value="列名")
    @TableField("column_name")
    private String columnName;
    //列注释
    @ExcelProperty(value="列注释")
    @TableField("column_desc")
    private String ColumnDesc;
    //类型
    @ExcelProperty(value="数据类型")
    @TableField("column_type")
    private String columnType;
    //长度
    @ExcelProperty(value="长度")
    @TableField("column_len")
    private String columnLen;
    //精度
    @ExcelProperty(value="精度")
    @TableField("precision")
    private String precision;
    //是否主键 Y true 都默认是主键
    @ExcelProperty(value="是否主键")
    @TableField("isPrimaryKey")
    private String isPrimaryKey;
    //是否允许为空 Y true 不允许为空
    @ExcelProperty(value="是否允许为空")
    @TableField("isNotNull")
    private String isNotNull;
    //是否索引列,方便进行生成建表语句的时候进行生成索引
    @ExcelProperty(value="是否索引列")
    @TableField("isIdxCol")
    private String isIdxCol;
}

下载模板

    /**
     * 下载excel模板
     */
    @GetMapping("/downLoadExcelTemplate")
    public void downLoadExcelTemplate(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");
        //空数据
        List<ColumnEntity> columnEntityList = null;
        EasyExcel.write(response.getOutputStream(), ColumnEntity.class).sheet("创建实体类模板").doWrite(columnEntityList);
    }

上传Excel文件

上传Excel我们需要监听读取sheet,EasyExcel会自动解析文件,我们只需要对监听的行进行处理就ok。

监听类

/***
 * easyexcel监听类
 */
@Slf4j
public class ColumnListener implements ReadListener {

    /**
     * 这个每一条数据解析都会来调用
     *
     * @param o
     * @param analysisContext
     */
    @Override
    public void invoke(Object o, AnalysisContext analysisContext) {
        System.out.println(o.toString());
    }

    /**
     * 所有数据解析完成了 都会来调用
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        //
        log.info("所有数据解析完成!");
    }
}

上传Excel

    /**
     * 文件上传
     * <p>1. 创建excel对应的实体对象 参照{@link }
     * <p>2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link }
     * <p>3. 直接读即可
     */
    @PostMapping("/uploadExcel")
    public String importData(MultipartFile file) throws IOException {
        EasyExcel.read(file.getInputStream(), ColumnEntity.class, new ColumnListener()).sheet().doRead();
        return "success";
    }

前端页面

前端主要使用elementui的上传文件组件进行上传。代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>excel上传下载管理</title>
</head>
<!--script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script-->
<!--引入静态的路径-->
<script type="text/javascript" src="js/vue.min.js"></script>
<!--script src="https://unpkg.com/element-ui/lib/index.js"></script-->
<script type="text/javascript" src="js/index.js"></script>
<!-- 引入样式 -->
<!--link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"-->
<link rel="stylesheet" href="css/index.css">
<!-- 引入组件库 -->
<!--引入通信框架-->
<!--script src="https://unpkg.com/axios/dist/axios.min.js"></script-->
<script type="text/javascript" src="js/axios.min.js"></script>
<body>
<div id="app">
    <h1 style="background-color: #409EFF;text-align: center;">EasyExcel上传下载管理</h1>
    <div>
        <el-form :inline="true"  class="demo-form-inline" label-position="center" >
            <el-form-item>
                <el-button type="primary" icon="el-icon-download" @click="downloadTemplate">下载excel模板</el-button>
                <el-button type="primary" icon="el-icon-upload2" @click="importData">上传excel</el-button>
            </el-form-item>
        </el-form>

        <!---导入弹框-->
        <el-dialog title="上传Excel:上传前先下载模板进行格式调整" :visible.sync="dialogImportVisible" width="480px">
            <!--选择框-->
            <el-form label-position="center" label-width="170px">
                <el-form-item label="文件">
                    <el-upload
                            :multiple="false"
                            :on-success="onUploadSuccess"
                            :action="'http://localhost:8017/uploadExcel'"
                            class="upload-demo">
                        <el-button size="small" type="primary">点击上传</el-button>
                        <div slot="tip" class="el-upload__tip">只能上传xls文件,且不超过500kb</div>
                    </el-upload>
                </el-form-item>
            </el-form>
            <div slot="footer" class="dialog-footer" style="text-align: center">
                <el-button type="info" @click="dialogImportVisible = false">取消</el-button>
            </div>
        </el-dialog>
    </div>
</div>
</body>
</html>
<script>
    new Vue({
        el: "#app",
        //数据
        data() {
            return {
                dialogImportVisible:false //导入上传文本框
            }
        },
        //创建之前
        created() {

        },
        //初始化加载数据
        mounted() {

        },
        methods: {
            //导入数据
            importData(){
                this.dialogImportVisible = true
            },
            //下载模板
            downloadTemplate(){
                window.open("http://localhost:8017/downLoadExcelTemplate")
            },
            //加载成功
            onUploadSuccess(response, file) {
                this.$message.info('上传成功')
                this.dialogImportVisible = false
            }
        }

    });
</script>
<style scoped>

</style>

测试

下载
下载模板
上传
后台监听数据:
监听数据

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot整合easyExcel 的相关文章

随机推荐

  • 国内服务器内存缓冲芯片,服务器内存拆芯片用

    服务器内存拆芯片用 内容精选 换一换 本次Ceph集群使用TaiShan服务器部署 三个Ceph节点采用三台为TaiShan 200服务器 型号2280 K8s节点两台均采用TaiShan 200服务器 型号2280 每台服务器配备4个SA
  • 国密SM2非对称加密算法(对本地文件的加解密)代码展示

    代码 package com example demo MIMAXUE SM import java io import java math BigInteger import java security SecureRandom impo
  • springboot 提示The hierarchy of the type ** is inconsistent

    SpringBoot 启动提示 The hierarchy of the type is inconsistent 原因 该类或其父类所在的jar包没有被引入 建议解决方案 从该类的父类开始跟踪源码 找到其所在的jar包并引入项目中 一般是
  • 【学习笔记】使用PicGo+Gitee实现md文档图片上传

    使用PicGo Gitee实现md文档图片上传 本笔记参考于Markdown Typora使用教程 前言 使用md文档进行记录的时候 经常需要在文档中放入图片 由于文档中的图片基本是放到本地的文件夹中 所以当我们需要将文档发给别人或者发布到
  • qt打开html如何使用http服务,Qt通过HTTP POST上传文件(示例代码)

    本文使用Qt Creator用HTTP POST的方法上传文件 并给出一个上传文件的例程 本文主要客户端 所以对于服务器端程序编写的描述会比较简略 服务器使用Django编写 django服务器接收文件的方法在文章http www cnbl
  • crm虚拟服务器搭建,搭建CRM服务器

    1 在windows下安装3 windows installer exe软件 默认安装 手动指定安装位置 比如 d crm 2 访问一下看看是否好用 3 进入d crm 拷贝D crm htdocs文件夹 到linux服务器下的网站默认文件
  • gensim中的word2vec的使用

    本着尊重原著的想法 我们先把一些引用的文章贴上来 供大家参考 word2vec的理论知识 这个真的蛮详细的 我表示没有耐心全部搞透啊 https blog csdn net itplus article details 37969519 苏
  • 【开发工具】 windows10使用adobe傻瓜式教程 真的太爽了吧!!

    个人主页 极客小俊 作者简介 web开发者 设计师 技术分享博主 希望大家多多支持一下 我们一起进步 如果文章对你有帮助的话 欢迎评论 点赞 收藏 加关注 其中包含了 你懂的 我不说啦 系统与硬件需求 操作系统 软件版本越高 对电脑系统要求
  • 矩阵篇(三)-- 矩阵的普通乘积、Hadamard 积、Kronecker 积及其性质

    1 普通乘积 matmul product 若 A pmb A AA 是 m n m times n m n 矩阵
  • CSS格式化代码(国内各大网站)

    京东格式化CSS代码 京东格式化CSS代码 把所有标签的默认内外边距清零 margin 0 padding 0 em 和 i 斜体文字不倾斜 em i font style normal 去掉li的小圆点 li list style non
  • hdfs删除和上传文件命令参考

    删除hadfs文件 export HADOOP USER NAME hdfs hadoop fs rm r skipTrash datafs 5gmr parameter neighborhood export HADOOP USER NA
  • 数字图像处理,经典对比度增强算法

    关于图像增强必须清楚的基本概念 1 图像增强的目的 1 改善图像的视觉效果 2 转换为更适合于人或机器分析处理的形式 3 突出对人或机器分析有意义的信息 4 抑制无用信息 提高图像的使用价值 5 增强后的图像并不一定保真 2 图像增强的方法
  • select函数的分析

    select函数位于头文件 include
  • 索引合并Intersection、union (3)--单表访问方法(三十八)

    上篇文章我们说了 使用索引的注意事项 前面我们总结了查询数据库的方式有const ref ref or null range index all 而使用时候需要注意 当where语句后面全是索引查询 当where语句后面跟着非索引的时候 当
  • 语音的基础知识

    1 语音信号的处理基础 1 语音信号的产生模型 语音是由发生器官产生的 肺呼进空气 由气管呼出形成气流 气流经由声门 使声带振动 产生一系列离散脉冲 再经由咽腔和口腔 有时还经由鼻腔 随着发音的不同 口的张合程度不同 舌在口中位置的不同 气
  • istreambuf_iterator和ostreambuf_iterator用法简单总结

    std istreambuf iterator 是单趟迭代器 从用来构造它的 std basic streambuf 对象读取相继字符 默认构造的 std istreambuf iterator 迭代器被称为流尾迭代器 合法的 std is
  • 怎么同时运行两个tomcat?

    转载至 http ask zol com cn x 4522378 html 这几天由于在搞那个jenkins的自动部署项目所以要使用到两个tomcat 因为重新部署的时候要先关闭Tomcat重启 只有一个的话jenkins就不能运行了 一
  • Native层HIDL服务的注册原理-Android10.0 HwBinder通信原理(六)

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • Altium Designer20下绘制原理图、原理图库文件

    文章目录 前言 一 新建工程 二 原理图绘制 1 原理图的图纸大小设置 2 原理图的放大与缩小 3 元器件的选择与放置 4 画图及技巧 三 原理图库文件的绘制 总结 前言 本文的主要内容是使用Altium Designer20软件绘制原理图
  • Springboot整合easyExcel

    Springboot整合easyExcel 介绍 Entity实体类 下载模板 上传Excel文件 上传Excel 前端页面 测试 介绍 平时工作中 我们经常都会用到excel文件上传或者下载的问题 比如将表数据导出为excel表格或者进行