Spring Boot使用easy poi

Spring Boot使用easy poi


前言

工作中需要每个月生成数据的报表,使用Excel展示数据。生成Excel肯定需要使用apache poi,但是我们可以直接使用easy poi,帮我们封装好了具体细节,但是使用起来有些细节还是需要变通的。


使用

  • 引入

    复制代码
      implementation ('cn.afterturn:easypoi-base:4.1.0'){
          exclude  group: 'com.google.guava', module: 'guava'
          exclude  group: 'org.apache.commons', module: 'commons-compress'
      }
      implementation('org.apache.commons:commons-compress:1.21')

排除掉这两个依赖是依赖有严重的漏洞,需要升级。

  • 简单使用
    比较简单的使用方法可以使用easy poi封装的工具类ExcelExportUtil,这里封装的方法大部分够我们使用了。这里介绍几个常用的API

    /**
    * @param entity
    * 表格标题属性
    * @param pojoClass
    * Excel对象Class
    * @param dataSet
    * Excel对象数据List
    */
    public static Workbook exportExcel(ExportParams entity, Class pojoClass, Collection dataSet)

ExportParams是导出参数,可以设置标题,sheet名称,使用的Excel类型:HSSF或者XSSF
HSSF: Excel97-2003版本,扩展名为.xls。一个sheet最大行数65536,最大列数256。
XSSF: Excel2007版本开始,扩展名为.xlsx。一个sheet最大行数1048576,最大列数16384。
SXSSF:是在XSSF基础上,POI3.8版本开始提供的支持低内存占用的操作方式,扩展名为.xlsx。(本次引入的包里是没有这个的)

简要使用:

java 复制代码
		Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(null,"result", ExcelType.XSSF),
                TestPojo.class, list);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        try {
            workbook.write(byteArrayOutputStream);
            byte[] byteArray = byteArrayOutputStream.toByteArray();
            return byteArray;
        } finally {
            workbook.close();
            byteArrayOutputStream.close();
        }

POJO如下:

java 复制代码
@Getter
@Setter
@ExcelTarget("pojo")
public class TestPojo implements java.io.Serializable {
    private String offerId;
    @Excel(name = "column1",  width = 20, isImportField = "true")
    private String column1;
    @Excel(name = "column2",  width = 20)
    private String column2;
    @Excel(name = "column3",  width = 30)
    private String column3;
}

isImportField = "true"意思就是导入参数,可以使用导入。


  • 项目使用

项目中使用的格式不是单纯的POJO,因为业务问题,产品分不同的sheet展示,当这个产品没有数据的时候,需要在sheet中展示话术没有数据,这就不是pojo了。

当然解决很简单的,毕竟只是个POI的封装,看下源代码,拆一下就好了。

源码如下:

java 复制代码
public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass,
                                      Collection<?> dataSet) {
    Workbook workbook = getWorkbook(entity.getType(),dataSet.size());
    new ExcelExportService().createSheet(workbook, entity, pojoClass, dataSet);
    return workbook;
}

这就简单很多了,核心就是这个ExcelExportService,传递一个Workbook 而已,我们直接使用这个ExcelExportService就可以了,而且这个类是public,完全可以在我们的业务代码中使用。

这样我们可以手动创建一个Workbook ,然后根据传递的Collection是不是空,判断是否要使用这个ExcelExportService,如果为空,我们就手动去创建sheet并且写入一行提示:'该产品没有数据'即可。

代码如下:

java 复制代码
XSSFWorkbook workbook = new XSSFWorkbook();
ExcelExportService excelExportService = new ExcelExportService();
if (!CollectionUtils.isEmpty(list)) {
    int size = list.size();
    excelExportService.createSheet(workbook, new ExportParams(DateUtil.getCurrentDateStr(),
            code, ExcelType.XSSF), TestPojo.class, list);
    buildCountRow(workbook.getSheet(code), size );
} else {
    buildNoValueOrExceptionWorkBook(code + " No Record found.", workbook, productCode);
}

手动创建代码:

java 复制代码
private Workbook buildNoValueOrExceptionWorkBook(String value, Workbook workbook, String sheetName) {
    if (workbook == null) {
        workbook = new XSSFWorkbook();
    }
    workbook.createSheet(sheetName).createRow(0).createCell(0)
            .setCellValue(value);
    return workbook;
}

打完收工!

相关推荐
行百里er11 小时前
Gateway 上别硬塞 MVC:DeferredImportSelector 看菜下锅
spring boot·后端·开源
黑马程序员毕设12 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
xcl092513 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·spring boot·需求分析
wxwx_bscxy32213 小时前
基于springboot宠物领养系统的设计与实现
数据库·spring boot·后端·spring·宠物
苏生Susheng13 小时前
【软件实施】Linux系统Shell脚本教程
linux·运维·服务器·chrome·spring boot·学习·实施
计算机毕设定制辅导-无忧学长15 小时前
《基于SpringBoot的马术俱乐部管理系统》
java·spring boot·后端
摇滚侠15 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 JDBC 事务管理 阅读笔记 33
spring boot·笔记·后端
学长毕业设计15 小时前
基于SpringBoot的民间艺术传承管理系统(源码+文档+讲解视频)
java·spring boot·后端
小蒜学长15 小时前
基于Springboot+Vue的环保行动志愿者招募系统设计与实现(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端
Json____17 小时前
springboot开发高校选课管理系统:从零构建前后端分离的全栈实践
java·spring boot·后端·毕业设计·毕设·wwwoop.com