Springboot整合easyExcel

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: Springboot整合easyExcel

Springboot整合easyExcel

介绍

平时工作中,我们经常都会用到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>

测试

73d54dd64ffc4617b1db94248c6092f2.png

87b9d7b640fc44ef8265838f8637cbe5.png


d78756b1d5f04beba639ffe60d0ec9cb.png

后台监听数据:

6d0ed272a3c24c56bda44ce76d924900.png

相关文章
|
2月前
|
存储 easyexcel Java
SpringBoot+EasyExcel轻松实现300万数据快速导出!
本文介绍了在项目开发中使用Apache POI进行数据导入导出的常见问题及解决方案。首先比较了HSSFWorkbook、XSSFWorkbook和SXSSFWorkbook三种传统POI版本的优缺点,然后根据数据量大小推荐了合适的使用场景。接着重点介绍了如何使用EasyExcel处理超百万数据的导入导出,包括分批查询、分批写入Excel、分批插入数据库等技术细节。通过测试,300万数据的导出用时约2分15秒,导入用时约91秒,展示了高效的数据处理能力。最后总结了公司现有做法的不足,并提出了改进方向。
|
3月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
5月前
|
JavaScript 前端开发 easyexcel
基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程
本文展示了基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的完整过程,包括后端使用EasyExcel生成Excel文件流,前端通过Blob对象接收并触发下载的操作步骤和代码示例。
932 0
基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程
|
7月前
|
easyexcel Java Maven
springboot使用EasyExcel导入导出填充,解决导出乱码问题(web)
springboot使用EasyExcel导入导出填充,解决导出乱码问题(web)
895 5
|
7月前
|
前端开发 easyexcel Java
springboot使用EasyExcel导入数据(获取行号)
springboot使用EasyExcel导入数据(获取行号)
665 1
|
7月前
|
easyexcel Java API
SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
1247 1
|
8月前
|
Java easyexcel 应用服务中间件
【二十五】springboot使用EasyExcel和线程池实现多线程导入Excel数据
【二十五】springboot使用EasyExcel和线程池实现多线程导入Excel数据
965 0
QGS
|
8月前
|
Java easyexcel 关系型数据库
手拉手浅学Springboot+EasyExcel
手拉手浅学Springboot+EasyExcel
QGS
84 1
QGS
|
8月前
|
前端开发 Java easyexcel
Springboot3+EasyExcel由浅入深
Springboot3+EasyExcel由浅入深
QGS
328 1
|
开发框架 Java easyexcel
如何使用 SpringBoot 集成 EasyExcel 3.x 来实现优雅的 Excel 导入导出功能?
如何使用 SpringBoot 集成 EasyExcel 3.x 来实现优雅的 Excel 导入导出功能?
769 2
如何使用 SpringBoot 集成 EasyExcel 3.x 来实现优雅的 Excel 导入导出功能?