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

相关文章
|
1月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
313 2
|
6月前
|
人工智能 Java API
Spring AI 实战|Spring AI入门之DeepSeek调用
本文介绍了Spring AI框架如何帮助Java开发者轻松集成和使用大模型API。文章从Spring AI的初探开始,探讨了其核心能力及应用场景,包括手动与自动发起请求、流式响应实现打字机效果,以及兼容不同AI服务(如DeepSeek、通义千问)的方法。同时,还详细讲解了如何在生产环境中添加监控以优化性能和成本管理。通过Spring AI,开发者可以简化大模型调用流程,降低复杂度,为企业智能应用开发提供强大支持。最后,文章展望了Spring AI在未来AI时代的重要作用,鼓励开发者积极拥抱这一技术变革。
2323 71
Spring AI 实战|Spring AI入门之DeepSeek调用
|
7月前
|
安全 Java 数据库
Spring Security 实战指南:从入门到精通
本文详细介绍了Spring Security在Java Web项目中的应用,涵盖登录、权限控制与安全防护等功能。通过Filter Chain过滤器链实现请求拦截与认证授权,核心组件包括AuthenticationProvider和UserDetailsService,负责用户信息加载与密码验证。文章还解析了项目结构,如SecurityConfig配置类、User实体类及自定义登录逻辑,并探讨了Method-Level Security、CSRF防护、Remember-Me等进阶功能。最后总结了Spring Security的核心机制与常见配置,帮助开发者构建健壮的安全系统。
418 0
|
4月前
|
前端开发 Java API
基于 Spring Boot 3 与 React 的 Java 学生信息管理系统从入门到精通实操指南
本项目基于Spring Boot 3与React 18构建学生信息管理系统,涵盖前后端开发、容器化部署及测试监控,提供完整实操指南与源码,助你掌握Java全栈开发技能。
216 0
|
5月前
|
Java 关系型数据库 MySQL
【Spring】【事务】初学者直呼学会了的Spring事务入门
本文深入解析了Spring事务的核心概念与使用方法。Spring事务是一种数据库事务管理机制,通过确保操作的原子性、一致性、隔离性和持久性(ACID),维护数据完整性。文章详细讲解了声明式事务(@Transactional注解)和编程式事务(TransactionTemplate、PlatformTransactionManager)的区别与用法,并探讨了事务传播行为(如REQUIRED、REQUIRES_NEW等)及隔离级别(如READ_COMMITTED、REPEATABLE_READ)。
431 1
|
5月前
|
Java API 微服务
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
591 0
|
10月前
|
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的端口配置不会生效。
2453 17
Spring Boot 两种部署到服务器的方式
|
7月前
|
存储 安全 Java
Spring Security 入门与详解
Spring Security 是 Spring 框架中的核心安全模块,提供认证、授权及防护功能。本文详解其核心概念,包括认证(Authentication)、授权(Authorization)和过滤器链(Security Filter Chain)。同时,通过代码示例介绍基本配置,如 PasswordEncoder、UserDetailsService 和自定义登录页面等。最后总结常见问题与解决方法,助你快速掌握 Spring Security 的使用与优化。
1702 0