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;
}

打完收工!

相关推荐
xyyaihxl1 小时前
springboot与springcloud对应版本
java·spring boot·spring cloud
小箌1 小时前
springboot_01
java·spring boot·后端
a8a3022 小时前
Springboot中CommandLineRunner的用法以及执行顺序的控制
java·spring boot·spring
sevenlin2 小时前
Spring Boot 经典九设计模式全览
java·spring boot·设计模式
salipopl2 小时前
Spring Boot 集成 MyBatis 全面讲解
spring boot·后端·mybatis
Java水解3 小时前
Spring Boot 数据仓库与ETL工具集成
spring boot·后端
beata3 小时前
Spring Boot基础-3:Spring Boot 4.x 配置文件全攻略与多环境切换
spring boot·后端
jolimark3 小时前
Spring Boot 集成 Kettle
java·spring boot·后端
gaozhiyong08133 小时前
SpringBoot连接多数据源MySQL、SqlServer等(MyBatisPlus测试)
spring boot·mysql·sqlserver
zb200641204 小时前
Spring Boot 实战篇(四):实现用户登录与注册功能
java·spring boot·后端