Spring Boot中使用EasyPoi入门

简介: 主要介绍如何使用EasyPoi的注解来完成简单的Excel导入、导出操作

在之前,我们处理Excel导入导出相关需求时,我们常用的是使用Apache POI来操作Excel。经常使用的步骤是

// 获取excel工作簿对象
HSSFWorkbook workBook = new HSSFWorkbook(new FileInputStream(file));
// 获得指定的excel表
HSSFSheet sheet = workbook.getSheetAt(0);

然后循环遍历sheet,结合sheet.getRow(index)row.getCell(index),取得单元格数据后再一个值一个值set到对应的POJO中,代码繁琐且不美观。

由此,我们使用了更加简单、便捷的EasyPoi,通过简单的注解和模版,就可以完成Excel的导入、导出。
本文主要来讲解如何使用EasyPoi的注解来完成简单的Excel导入、导出操作。

常用注解说明

@Excel

@Excel注解是用于filed字段上,说明一个Excel的列属性。其中常用的属性有:

  • name: Excel中的列名
  • width:单元格的宽度
  • needMerge: 是否需要纵向合并单元格
  • replace: 属性值替换,eg.{"线上活动_0", "线下活动_1"}
  • format: 时间格式。
  • desensitizationRule: 脱敏处理。eg.身份证号脱敏,可以设置为"3_4",即保留前3后4,其余展示为*

@ExcelCollection

@ExcelCollection 表示一个集合,可以用于表示一对多关系。

@ExcelIgnore

@ExcelIgnore 导入导出时需要忽略的字段。

集成EasyPoi

在pom.xml中添加依赖即可。

<!-- easypoi  -->
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-spring-boot-starter</artifactId>
    <version>4.4.0</version>
</dependency>

导出Excel

1、首先我们先创建一个峰会活动对象SummitActivityVO


/**
 * 峰会活动VO对象
 * @author liujianfeng
 * @date 2021-11-04
 */
@Data
public class SummitActivityVO {
    /**
     * 活动id
     */
    @Excel(name = "ID", width = 10, needMerge = true)
    private Long id;
    /**
     * 活动名称
     */
    @Excel(name = "活动名称", width = 20, needMerge = true)
    private String activityName;
    /**
     * 活动类型
     */
    @Excel(name = "活动类型", width = 10, replace = {"线上活动_0", "线下活动_1"}, needMerge = true)
    private String activityType;
    /**
     * 活动地点
     */
    @Excel(name = "活动地点", width = 40, needMerge = true)
    private String activityAddress;
    /**
     * 活动开始时间
     */
    @Excel(name = "活动开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss", needMerge = true)
    private Date activityStartTime;
    /**
     * 活动开始时间
     */
    @Excel(name = "活动结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss", needMerge = true)
    private Date activityEndTime;
    /**
     * 活动下的议程列表
     */
    @ExcelCollection(name = "议程列表")
    @ExcelEntity
    private List<SummitAgendaVO> agendaList;
}

其中SummitActivityVO包含一个类型为SummitAgendaVO的List对象agendaList。

2、创建峰会议程对象SummitAgendaVO


/**
 * 峰会议程
 * @author liujianfeng
 * @date 2021-11-04
 */
@Data
public class SummitAgendaVO {
    /**
     * 议程ID
     */
    @ExcelIgnore
    private Long id;
    /**
     * 关联的活动id
     */
    @ExcelIgnore
    private Long activityId;
    /**
     * 议程名称
     */
    @Excel(name = "议程名称", width = 30)
    private String agendaName;
    /**
     * 议程内容
     */
    @Excel(name = "议程内容", width = 100)
    private String agendaContent;
    /**
     * 议程开始时间
     */
    @Excel(name = "议程开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
    private Date agendaStartTime;
    /**
     * 议程结束时间
     */
    @Excel(name = "议程开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
    private Date agendaEndTime;
}

3、创建好的导出对象之后,我们mock下导出数据

private List<SummitActivityVO> handleExportData() {
        List<SummitActivityVO> summitActivityList = new ArrayList<>();
        for (int i=0; i<10; i++) {
            SummitActivityVO summitActivityVO = new SummitActivityVO();
            summitActivityVO.setId((long) i);
            summitActivityVO.setActivityName("活动名称_" + i);
            summitActivityVO.setActivityAddress("活动地点" + i);
            summitActivityVO.setActivityType("0");
            summitActivityVO.setActivityStartTime(new Date());
            summitActivityList.add(summitActivityVO);
            List<SummitAgendaVO> agendaList = new ArrayList<>();
            for (int j=0; j<10; j++) {
                SummitAgendaVO summitAgendaVO = new SummitAgendaVO();
                summitAgendaVO.setId((long) j);
                summitAgendaVO.setActivityId((long) i);
                summitAgendaVO.setAgendaName("议程名称_" + j);
                summitAgendaVO.setAgendaContent("这个是活动名称" + i + "的第"+ j + "个议程的议程内容");
                summitAgendaVO.setAgendaStartTime(new Date());
                agendaList.add(summitAgendaVO);
            }
            summitActivityVO.setAgendaList(agendaList);
        }
        return summitActivityList;
    }

接下来在Controller中新增一个导出模拟数据的接口

    @ResponseBody
    @RequestMapping("exportExcel")
    public void exportExcelWithEasyPoi(HttpServletRequest request, HttpServletResponse response) {
        List<SummitActivityVO> dataList = handleExportData();
        ExportParams params = new ExportParams("活动信息", "活动列表");
        ModelMap map = new ModelMap();
        map.put(NormalExcelConstants.PARAMS, params);
        map.put(NormalExcelConstants.CLASS, SummitActivityVO.class);
        map.put(NormalExcelConstants.DATA_LIST, dataList);
        map.put(NormalExcelConstants.FILE_NAME, "活动信息列表");
        PoiBaseView.render(map, request, response, NormalExcelConstants.EASYPOI_EXCEL_VIEW);
    }

4、运行项目,调用Controller中的exportExcel方法,下载Excel到本地。这样子就可以完成简单的Excel导出了。

导出excel.jpg

导入Excel

在Controller中新增Excel导入接口

    @ResponseBody
    @RequestMapping("importExcel")
    public DataResult<Boolean> importSummitActivity(String pathname) {
        File file = new File(pathname);
        ImportParams params = new ImportParams();
        params.setTitleRows(1);
        params.setHeadRows(2);
        List<SummitActivityVO> importList = ExcelImportUtil.importExcel(file, SummitActivityVO.class, params);
        log.info(StringUtils.join(importList, ","));
        log.info("import success");
        return DataResult.success(Boolean.TRUE, "导入成功");
    }

运行代码后,在浏览器上访问http://localhost:8080/easyPoi/importExcel?pathname=/Users/liujianfeng/Downloads/活动信息列表-4.xlsx,将exportExcel方法导出的Excel导入,我们将在控制台上看到获取到的数据

INFO 60577 --- [nio-8080-exec-1] c.e.ljf.controller.EasyPoiController     : SummitActivityVO(id=0, activityName=活动名称_0, activityType=0, activityAddress=活动地点0, activityStartTime=Wed Nov 10 01:26:03 CST 2021, activityEndTime=null, agendaList=[SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_0, agendaContent=这个是活动名称0的第0个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_1, agendaContent=这个是活动名称0的第1个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_2, agendaContent=这个是活动名称0的第2个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_3, agendaContent=这个是活动名称0的第3个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_4, agendaContent=这个是活动名称0的第4个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_5, agendaContent=这个是活动名称0的第5个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_6, agendaContent=这个是活动名称0的第6个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_7, agendaContent=这个是活动名称0的第7个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_8, agendaContent=这个是活动名称0的第8个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_9, agendaContent=这个是活动名称0的第9个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021)]),SummitActivityVO(id=1, activityName=活动名称_1, activityType=0, activityAddress=活动地点1, activityStartTime=Wed Nov 10 01:26:03 CST 2021, activityEndTime=null, agendaList=[SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_0, agendaContent=这个是活动名称1的第0个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_1, agendaContent=这个是活动名称1的第1个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_2, agendaContent=这个是活动名称1的第2个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_3, agendaContent=这个是活动名称1的第3个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_4, agendaContent=这个是活动名称1的第4个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_5, agendaContent=这个是活动名称1的第5个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_6, agendaContent=这个是活动名称1的第6个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_7, agendaContent=这个是活动名称1的第7个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_8, agendaContent=这个是活动名称1的第8个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_9, agendaContent=这个是活动名称1的第9个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021)]),SummitActivityVO(id=2, activityName=活动名称_2, activityType=0, activityAddress=活动地点2, activityStartTime=Wed Nov 10 01:26:03 CST 2021, activityEndTime=null, agendaList=[SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_0, agendaContent=这个是活动名称2的第0个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_1, agendaContent=这个是活动名称2的第1个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_2, agendaContent=这个是活动名称2的第2个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_3, agendaContent=这个是活动名称2的第3个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_4, agendaContent=这个是活动名称2的第4个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_5, agendaContent=这个是活动名称2的第5个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_6, agendaContent=这个是活动名称2的第6个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_7, agendaContent=这个是活动名称2的第7个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_8, agendaContent=这个是活动名称2的第8个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_9, agendaContent=这个是活动名称2的第9个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021)]),SummitActivityVO(id=3, activityName=活动名称_3, activityType=0, activityAddress=活动地点3, activityStartTime=Wed Nov 10 01:26:03 CST 2021, activityEndTime=null, agendaList=[SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_0, agendaContent=这个是活动名称3的第0个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_1, agendaContent=这个是活动名称3的第1个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_2, agendaContent=这个是活动名称3的第2个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_3, agendaContent=这个是活动名称3的第3个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_4, agendaContent=这个是活动名称3的第4个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_5, agendaContent=这个是活动名称3的第5个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_6, agendaContent=这个是活动名称3的第6个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_7, agendaContent=这个是活动名称3的第7个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_8, agendaContent=这个是活动名称3的第8个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_9, agendaContent=这个是活动名称3的第9个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021)]),SummitActivityVO(id=4, activityName=活动名称_4, activityType=0, activityAddress=活动地点4, activityStartTime=Wed Nov 10 01:26:03 CST 2021, activityEndTime=null, agendaList=[SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_0, agendaContent=这个是活动名称4的第0个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_1, agendaContent=这个是活动名称4的第1个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_2, agendaContent=这个是活动名称4的第2个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_3, agendaContent=这个是活动名称4的第3个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_4, agendaContent=这个是活动名称4的第4个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_5, agendaContent=这个是活动名称4的第5个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_6, agendaContent=这个是活动名称4的第6个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_7, agendaContent=这个是活动名称4的第7个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_8, agendaContent=这个是活动名称4的第8个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_9, agendaContent=这个是活动名称4的第9个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021)]),SummitActivityVO(id=5, activityName=活动名称_5, activityType=0, activityAddress=活动地点5, activityStartTime=Wed Nov 10 01:26:03 CST 2021, activityEndTime=null, agendaList=[SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_0, agendaContent=这个是活动名称5的第0个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_1, agendaContent=这个是活动名称5的第1个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_2, agendaContent=这个是活动名称5的第2个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_3, agendaContent=这个是活动名称5的第3个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_4, agendaContent=这个是活动名称5的第4个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_5, agendaContent=这个是活动名称5的第5个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_6, agendaContent=这个是活动名称5的第6个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_7, agendaContent=这个是活动名称5的第7个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_8, agendaContent=这个是活动名称5的第8个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_9, agendaContent=这个是活动名称5的第9个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021)]),SummitActivityVO(id=6, activityName=活动名称_6, activityType=0, activityAddress=活动地点6, activityStartTime=Wed Nov 10 01:26:03 CST 2021, activityEndTime=null, agendaList=[SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_0, agendaContent=这个是活动名称6的第0个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_1, agendaContent=这个是活动名称6的第1个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_2, agendaContent=这个是活动名称6的第2个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_3, agendaContent=这个是活动名称6的第3个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_4, agendaContent=这个是活动名称6的第4个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_5, agendaContent=这个是活动名称6的第5个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_6, agendaContent=这个是活动名称6的第6个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_7, agendaContent=这个是活动名称6的第7个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_8, agendaContent=这个是活动名称6的第8个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_9, agendaContent=这个是活动名称6的第9个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021)]),SummitActivityVO(id=7, activityName=活动名称_7, activityType=0, activityAddress=活动地点7, activityStartTime=Wed Nov 10 01:26:03 CST 2021, activityEndTime=null, agendaList=[SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_0, agendaContent=这个是活动名称7的第0个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_1, agendaContent=这个是活动名称7的第1个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_2, agendaContent=这个是活动名称7的第2个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_3, agendaContent=这个是活动名称7的第3个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_4, agendaContent=这个是活动名称7的第4个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_5, agendaContent=这个是活动名称7的第5个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_6, agendaContent=这个是活动名称7的第6个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_7, agendaContent=这个是活动名称7的第7个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_8, agendaContent=这个是活动名称7的第8个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_9, agendaContent=这个是活动名称7的第9个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021)]),SummitActivityVO(id=8, activityName=活动名称_8, activityType=0, activityAddress=活动地点8, activityStartTime=Wed Nov 10 01:26:03 CST 2021, activityEndTime=null, agendaList=[SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_0, agendaContent=这个是活动名称8的第0个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_1, agendaContent=这个是活动名称8的第1个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_2, agendaContent=这个是活动名称8的第2个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_3, agendaContent=这个是活动名称8的第3个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_4, agendaContent=这个是活动名称8的第4个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_5, agendaContent=这个是活动名称8的第5个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_6, agendaContent=这个是活动名称8的第6个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_7, agendaContent=这个是活动名称8的第7个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_8, agendaContent=这个是活动名称8的第8个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_9, agendaContent=这个是活动名称8的第9个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021)]),SummitActivityVO(id=9, activityName=活动名称_9, activityType=0, activityAddress=活动地点9, activityStartTime=Wed Nov 10 01:26:03 CST 2021, activityEndTime=null, agendaList=[SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_0, agendaContent=这个是活动名称9的第0个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_1, agendaContent=这个是活动名称9的第1个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_2, agendaContent=这个是活动名称9的第2个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_3, agendaContent=这个是活动名称9的第3个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_4, agendaContent=这个是活动名称9的第4个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_5, agendaContent=这个是活动名称9的第5个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_6, agendaContent=这个是活动名称9的第6个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_7, agendaContent=这个是活动名称9的第7个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_8, agendaContent=这个是活动名称9的第8个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021), SummitAgendaVO(id=null, activityId=null, agendaName=议程名称_9, agendaContent=这个是活动名称9的第9个议程的议程内容, agendaStartTime=null, agendaEndTime=Wed Nov 10 01:26:03 CST 2021)])
INFO 60577 --- [nio-8080-exec-1] c.e.ljf.controller.EasyPoiController     : import success

以上内容就是在Spring Boot项目中使用EasyPoi实现Excel的简单导入和导出功能。此外EasyPoi还支持Html和模板的导出,下次再研究分享。

相关文章
|
2月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
2月前
|
Java
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
这篇文章是Spring5框架的实战教程,深入讲解了AOP的基本概念、如何利用动态代理实现AOP,特别是通过JDK动态代理机制在不修改源代码的情况下为业务逻辑添加新功能,降低代码耦合度,并通过具体代码示例演示了JDK动态代理的实现过程。
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
|
10天前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
22 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
9天前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
13 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
9天前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
12 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
23天前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
42 2
|
2月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
2月前
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
2月前
|
SQL 数据库
Spring5入门到实战------13、使用JdbcTemplate操作数据库(批量增删改)。具体代码+讲解 【下篇】
这篇文章是Spring5框架的实战教程,深入讲解了如何使用JdbcTemplate进行数据库的批量操作,包括批量添加、批量修改和批量删除的具体代码实现和测试过程,并通过完整的项目案例展示了如何在实际开发中应用这些技术。
Spring5入门到实战------13、使用JdbcTemplate操作数据库(批量增删改)。具体代码+讲解 【下篇】
|
2月前
|
XML Java 数据格式
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解