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和模板的导出,下次再研究分享。

相关文章
|
29天前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
241 17
Spring Boot 两种部署到服务器的方式
|
2月前
|
存储 安全 Java
Spring Security 入门
Spring Security 是 Spring 框架中的安全模块,提供强大的认证和授权功能,支持防止常见攻击(如 CSRF 和会话固定攻击)。它通过过滤器链拦截请求,核心概念包括认证、授权和自定义过滤器。配置方面,涉及密码加密、用户信息服务、认证提供者及过滤器链设置。示例代码展示了如何配置登录、注销、CSRF防护等。常见问题包括循环重定向、静态资源被拦截和登录失败未返回错误信息,解决方法需确保路径正确和添加错误提示逻辑。
Spring Security 入门
|
1月前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
361 7
|
6月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
2月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
103 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
Java 数据库连接 数据库
从入门到精通---深入剖析Spring DAO
在Java企业级开发中,Spring框架以其强大的功能和灵活性,成为众多开发者的首选。Spring DAO(Data Access Object)作为Spring框架中处理数据访问的重要模块,对JDBC进行了抽象封装,极大地简化了数据访问异常的处理,并能统一管理JDBC事务。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring DAO,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
34 1
|
3月前
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
86 5
|
3月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
79 2
|
4月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
139 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
4月前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
56 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现