此demo 是基于poi封装对象式注解导入导出,项目框架为springboot项目!

简单的说明一下此demo涉及到的知识点,希望能给初学者带来方便!

  1. poi-excel 基本操作(工具)
  2. 自定义注解的使用
  3. 全局异常捕获的定义
  4. jkd1.8新特性:Lambda 表达式 、函数式接口 等等
  5. 统一出参包装类
  6. lombok ...
  7. 比较适合初学者~

这份excel是无法定义复杂的excel模版的,只能适用于最简单的excel导入导出,若不符合需求,请自行更改~

大致说一下提供的excel工具吧!

导出:

  1. /**
  2. * 导出模版
  3. *
  4. * @param excelName excel 名称
  5. * @param clazz 数据集
  6. * @param response 使用response可以导出到浏览器
  7. * @param <T>
  8. * @return
  9. */
  10. public static <T> Boolean exportTemplate(String excelName, Class<T> clazz, HttpServletResponse response)
  11. /**
  12. * 导出模版
  13. *
  14. * @param excelName excel 名称
  15. * @param clazz 数据集
  16. * @param type excel 类型
  17. * @param response 使用response可以导出到浏览器
  18. * @param <T>
  19. * @return
  20. */
  21. public static <T> Boolean exportTemplate(String excelName, Class<T> clazz, Type type, HttpServletResponse response)
  22. /**
  23. * excel 导出 (对象)
  24. *
  25. * @param excelName excel 名称
  26. * @param list 数据集
  27. * @param clazz 反射clazz
  28. * @param response 使用response可以导出到浏览器
  29. * @param <T>
  30. * @return
  31. */
  32. public static <T> Boolean exportExcel(String excelName, List<T> list, Class<T> clazz, HttpServletResponse response)
  33. /**
  34. * excel 导出 (对象)
  35. *
  36. * @param excelName excel 名称
  37. * @param list 数据集
  38. * @param clazz 反射clazz
  39. * @param type excel 类型
  40. * @param response 使用response可以导出到浏览器
  41. * @param <T>
  42. * @return
  43. */
  44. public static <T> Boolean exportExcel(String excelName, List<T> list, Class<T> clazz, Type type, HttpServletResponse response)
  45. /**
  46. * excel 导出 (Map)
  47. *
  48. * @param excelName excel 名称
  49. * @param clazz 反射clazz
  50. * @param list 数据集
  51. * @param response 使用response可以导出到浏览器
  52. * @param <T>
  53. * @return
  54. */
  55. public static <T> Boolean exportExcel(String excelName, Class<T> clazz, List<Map<String, Object>> list, HttpServletResponse response)
  56. /**
  57. * excel 导出 (Map)
  58. *
  59. * @param excelName excel 名称
  60. * @param clazz
  61. * @param list 数据集
  62. * @param type excel 类型
  63. * @param response 使用response可以导出到浏览器
  64. * @param <T>
  65. * @return
  66. */
  67. public static <T> Boolean exportExcel(String excelName, Class<T> clazz, List<Map<String, Object>> list, Type type, HttpServletResponse response)

导入:

  1. /**
  2. * 传入文本对象输出list集合(导入)
  3. *
  4. * @param file 流文件
  5. * @param clazz 要转义成的类对象
  6. * @return
  7. */
  8. public static <T> List<T> importExcel(MultipartFile file, Class<T> clazz)

excel注解类,提供了几个简单的判断处理:

  1. /**
  2. * <p>
  3. * excel 注解
  4. * </p>
  5. *
  6. * @author <a href="mailto:yangyanrui@yidianlife.com">xiaoyang</a>
  7. * @version V0.0.1
  8. * @date 2019年09月10日
  9. */
  10. @Documented
  11. @Retention(RetentionPolicy.RUNTIME)
  12. @Target({ElementType.FIELD})
  13. public @interface Excel {
  14. /**
  15. * 表头中文
  16. *
  17. * @return
  18. */
  19. String titleName();
  20. /**
  21. * 列宽
  22. *
  23. * @return
  24. */
  25. int titleSize() default 30;
  26. /**
  27. * 字段顺序 正序
  28. *
  29. * @return
  30. */
  31. int orderNum();
  32. /**
  33. * 是否允许空值 ,默认不允许
  34. * <p>
  35. * false:不允许 true :允许
  36. *
  37. * @return
  38. */
  39. boolean empty() default false;
  40. /**
  41. * 内部类
  42. *
  43. * @return
  44. */
  45. CellType type() default @CellType;
  46. /**
  47. * 设置格式
  48. * 默认:
  49. * 时间:yyyy-MM-dd HH:mm:ss
  50. * 小数点:两位,四舍五入
  51. *
  52. * @return
  53. */
  54. @interface CellType {
  55. TimeType timeType() default TimeType.TIMEF_FORMAT;
  56. DecimalType decimalType() default DecimalType.two;
  57. }
  58. }

TimeType 工具类:

  1. /**
  2. * <p>
  3. * 日期格式
  4. * </p>
  5. *
  6. * @author <a href="mailto:yangyanrui@yidianlife.com">xiaoyang</a>
  7. * @version V0.0.1
  8. * @date 2019年09月20日
  9. */
  10. public enum TimeType {
  11. /**
  12. * yyyy-MM-dd
  13. */
  14. DATE_FORMAT("yyyy-MM-dd"),
  15. /**
  16. * yyyy-MM
  17. */
  18. YEAR_S_MONTH("yyyy-MM"),
  19. /**
  20. * yyyyMM
  21. */
  22. YEAR_MONTH("yyyyMM"),
  23. /**
  24. * yyyy-MM-dd HH:mm:ss
  25. */
  26. TIMEF_FORMAT("yyyy-MM-dd HH:mm:ss"),
  27. /**
  28. * yyyy-MM-dd HH:mm:ss.SSS
  29. */
  30. MSEL_FORMAT("yyyy-MM-dd HH:mm:ss.SSS"),
  31. /**
  32. * yyyy年MM月dd日
  33. */
  34. ZHCN_DATE_FORMAT("yyyy年MM月dd日"),
  35. /**
  36. * yyyy年MM月dd日HH时mm分ss秒
  37. */
  38. ZHCN_TIME_FORMAT("yyyy年MM月dd日HH时mm分ss秒"),
  39. /**
  40. * yyyy年MM月dd日HH时mm分ss秒SSS毫秒
  41. */
  42. ZHCN_MSEL_FORMAT("yyyy年MM月dd日HH时mm分ss秒SSS毫秒"),
  43. /**
  44. * yyyyMMdd
  45. */
  46. DATE_STR_FORMAT("yyyyMMdd"),
  47. /**
  48. * yyyyMMddHHmmss
  49. */
  50. TIME_STR_FORMAT("yyyyMMddHHmmss"),
  51. /**
  52. * yyyyMMddHHmmssSSS
  53. */
  54. MSEL_STR_FORMAT("yyyyMMddHHmmssSSS"),
  55. /**
  56. * yyyy-MM-dd HH:mm
  57. */
  58. MSEL_MIU_FORMAT("yyyy-MM-dd HH:mm"),
  59. /**
  60. * yyyyMMddHH
  61. */
  62. MS_MIU_FORMAT("yyyyMMddHH");
  63. /**
  64. * 日期格式
  65. */
  66. private String timeType;
  67. /**
  68. * 日期格式
  69. *
  70. * @param timeType
  71. */
  72. TimeType(String timeType) {
  73. this.timeType = timeType;
  74. }
  75. /**
  76. * 获取日期格式
  77. *
  78. * @return
  79. */
  80. public String getTimeType() {
  81. return timeType;
  82. }
  83. }

DecimalType 工具类:

  1. /**
  2. * <p>
  3. * 小数点格式
  4. * </p>
  5. *
  6. * @author <a href="mailto:yangyanrui@yidianlife.com">xiaoyang</a>
  7. * @version V0.0.1
  8. * @date 2019年09月20日
  9. */
  10. public enum DecimalType {
  11. /**
  12. * 一位
  13. */
  14. one(1, "0.0"),
  15. /**
  16. * 两位
  17. */
  18. two(2, "0.00"),
  19. /**
  20. * 三位
  21. */
  22. three(3, "0.000"),
  23. /**
  24. * 四位
  25. */
  26. four(4, "0.0000"),
  27. /**
  28. * 五位
  29. */
  30. five(5, "0.00000");
  31. /**
  32. * 日期格式
  33. */
  34. private String decimal;
  35. private int scale;
  36. /**
  37. * 日期格式
  38. *
  39. * @param scale
  40. * @param decimal
  41. */
  42. DecimalType(int scale, String decimal) {
  43. this.scale = scale;
  44. this.decimal = decimal;
  45. }
  46. /**
  47. * 获取日期格式
  48. *
  49. * @return
  50. */
  51. public String getDecimal() {
  52. return decimal;
  53. }
  54. /**
  55. * 获取日期格式
  56. *
  57. * @return
  58. */
  59. public int getScale() {
  60. return scale;
  61. }
  62. }

  附上GitHub地址:https://github.com/yangqiyue/excel

springboot-poi ---封装注解式导入导出的更多相关文章

  1. poi实现excel的导入导出功能

    Java使用poi实现excel的导入导出功能: 工具类ExcelUtil,用于解析和初始化excel的数据:代码如下 package com.raycloud.kmmp.item.service.u ...

  2. SpringBoot 实现 excel 全自由导入导出,性能强的离谱,用起来还特优雅

    一.简介 在实际的业务系统开发过程中,操作 Excel 实现数据的导入导出基本上是个非常常见的需求. 之前,我们有介绍一款非常好用的工具:EasyPoi,有读者提出在数据量大的情况下,EasyPoi ...

  3. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  4. SSM中使用POI实现excel的导入导出

    环境:导入POI对应的包 环境: Spring+SpringMVC+Mybatis POI对应的包 <dependency> <groupId>org.apache.poi&l ...

  5. Java集成POI进行Excele的导入导出,以及报错: java.lang.AbstractMethodError..........

    报错信息如下 java.lang.AbstractMethodError: org.apache.poi.xssf.usermodel.XSSFCell.setCellType(Lorg/apache ...

  6. 用poi框架进行批量导入导出实例

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能.我们这里使用poi对数据库中的数据进行批量导出,以及 ...

  7. 使用Poi对EXCLE的导入导出

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...

  8. springboot整合easyexcel实现Excel导入导出

    easyexcel:快速.简单避免OOM的java处理Excel工具 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套 ...

  9. POI实现excel的导入导出

    引入依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</arti ...

  10. poi管道流的导入导出

    /** * 导入学生信息 * * @param classid * @param uploadFilePath * @return */ public boolean uploadStudentFil ...

随机推荐

  1. Testlink for linux by Xampp

    Testlink 1.环境: (1)需要的环境配置: ①Linux system. ②Mysql ③apache ④Php (2)上面的2,3,4我们使用简易的Xamppp集成的环境,下面是安装配置x ...

  2. Crypto入门 (十一)easychallenge

    前言: 这题跟python有关,可见看懂python代码还是很有必要得,需要有一些python基础才好 easychallenge: 题目: 下载后来发现是一个.pyc为后缀得文件,查找资料可知,该文 ...

  3. 【原创】freetype android交叉编译

    项目中Opencv需要显示中文,由于本身并不支持,所以需要借助第三方的库freetype来实现.这个库虽然android本身也有使用,但并没有暴露接口给外部使用. freetype官网 方式1 脚本编 ...

  4. 图算法之BFS

    深度优先搜索(Breadth  First Search),类似于树的层序遍历,搜索模型是队列,还是以下面的无向图为例: 实验环境是Ubuntu 14.04 x86 伪代码实现如下: 其中u 为 v ...

  5. linux : root  密码忘记,解决办法

    1.重启 2.在启动选择系统内核界面,按e键进入单用户模式 3.找到linux16(或者linux) 开头行,删除ro,并且在ro处添加 rw init=/sysroot/bin/sh 4.按 ctr ...

  6. ffmpeg的常用参数

    -encoders 查看支持的编码器 Intel处理器的核心显卡支持的编码器带有qsv后缀(Intel quick sync video acceleration)        NVIDIA独立显卡 ...

  7. 使用php将字典格式的字符串转为array

    例: 原字符串为 $a = '{"errcode":0,"errmsg":"ok","msgid":1472671765 ...

  8. kafka-集群搭建及启动脚本

    集群搭建: [root@localhost kafka_2.11-0.10.2.1]# cat config/server.properties | grep -v ^$ | grep -v ^# b ...

  9. Matlab - 在Figure中调整X轴到x=0,y=0处

    原图 调整 选中图像后打开属性编辑器,将X轴位置修改为原点. 结果

  10. Django中间件的介绍及使用

    1.中间件的理解: 是用来处理Django请求与响应的框架级别的钩子,处于wsgi模块与视图函数之间,在执行视图函数之前和之后所做      的动作,是一个轻量级.低级别的插件,作用于全局,使用不当很 ...