EasyPOI导入导出Excel:内含工具类,可直接使用

easypoi excel导入导出(多sheet) 一、导入jar包 <!--EasyPoi导入导出--> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.0.3</version> <exclusions> <exclusion> 阅读详情

1 操作步骤

1.0 引入依赖
      <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>4.0.0</version>
        </dependency>
1.1 引入EasyPOI工具类
package com.gosun.pcms.util;

import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.export.styler.ExcelExportStylerBorderImpl;

import org.apache.poi.ss.usermodel.Workbook;
import org.bouncycastle.util.StoreException;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.*;

public class PoiUtils {

    /**
     * Excel导出工具类
     * @param list 待转换实体集合
     * @param title 表单表头
     * @param sheetName sheet名称
     * @param pojoClass 实体的Class对象
     * @param fileName Excel文件名称
     * @param response 响应:Excel将放入响应的输出流中
     */
    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, HttpServletResponse response) throws StoreException {
        ExportParams exportParams = new ExportParams(title, sheetName);
        exportParams.setStyle(ExcelExportStylerBorderImpl.class);
        defaultExport(list, pojoClass, fileName, response, exportParams);
    }

    private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) throws StoreException {
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
        if (workbook != null)
        downLoadExcel(fileName, response, workbook);
    }

    private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) throws StoreException {
        try {
            response.setCharacterEncoding("UTF-8");
            response.setHeader("content-Type", "application/vnd.ms-excel");
            response.setHeader("Content-Disposition",
                    "attachment;filename=" + URLEncoder.encode(fileName+".xls", "UTF-8"));
            workbook.write(response.getOutputStream());
        } catch (IOException e) {
            throw new StoreException(e.getMessage(), e);
        }
    }

    /**
     * Excel导入工具类
     * @param file 上传的Excel文件
     * @param classType 待转化的Class对象 
     * @param <T> T 方法独立
     * @return 转化完毕的对象集合 
     */
    public static <T> List<T> importExcel(MultipartFile file, Class<T> classType) throws Exception {
        ImportParams params = new ImportParams();
        params.setTitleRows(1);
        params.setHeadRows(1);
        return ExcelImportUtil.importExcel(file.getInputStream(), classType, params);
    }
}

1.2 实体类增加@Excel注解

在需要导入导出的实体类上面添加@Excel注解即可,该注解支持属性有name(表单列名)和width(列宽)等

package com.gosun.pcms.bean.vo;

import cn.afterturn.easypoi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;


import java.util.Date;

/**
 * @author yiqiang
 * @date 2020/8/10 19:55
 */
@Getter
@Setter
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "DetentionAlarmVO",description = "扣车告警信息")
public class AccidentInfoVO {

    @Excel(name = "UUID")
    @ApiModelProperty(value = "主键")
    private String uuid;

    @Excel(name = "事故类型")
    @ApiModelProperty(value = "事故类型ID")
    private String accidentTypeId;

    @Excel(name = "发生时间",format = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "发生时间")
    private Date accidentTime;

    @Excel(name = "事故发生地点")
    @ApiModelProperty(value = "事故发生地点")
    private String accidentLocation;

    @ApiModelProperty(value = "经度")
    private String accidentLongitude;

    @ApiModelProperty(value = "纬度")
    private String accidentLatitude;

    @Excel(name = "涉案车辆A")
    @ApiModelProperty(value = "涉案车辆A")
    private String vehicleA;

    @Excel(name = "涉案车辆B")
    @ApiModelProperty(value = "涉案车辆B")
    private String vehicleB;

    @Excel(name = "主要责任人")
    @ApiModelProperty(value = "主要责任人")
    private String principalResponse;

    @Excel(name = "次要责任人")
    @ApiModelProperty(value = "次要责任人")
    private String secondaryResponse;

    @Excel(name = "事故详情")
    @ApiModelProperty(value = "事故详情")
    private String accidentDetail;

    @Excel(name = "归档时间",format = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "归档时间")
    private Date pigeonholeTime;
}

1.3 controller层测试代码
package com.gosun.pcms.controller;

import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.gosun.pcms.bean.PageCondition;
import com.gosun.pcms.bean.PageInfo;
import com.gosun.pcms.bean.pojo.PcmsAccidentInfo;
import com.gosun.pcms.bean.pojo.PcmsDetentionAlarm;
import com.gosun.pcms.bean.pojo.PcmsDetentionVehicleInfo;
import com.gosun.pcms.bean.vo.AccidentInfoVO;
import com.gosun.pcms.bean.vo.DetentionAlarmVO;
import com.gosun.pcms.service.AccidentInfoService;
import com.gosun.pcms.util.PoiUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;

/**
 * @author yiqiang
 * @date 2020/8/10 17:41
 */
@RequestMapping(value = "/accidentInfo")
@RestController
@Api(value = "事故信息",description = "事故信息")
public class AccidentInfoController {

    @Resource
    private AccidentInfoService accidentInfoService;

    @GetMapping(value = "/exportAccidentInfo")
    @ApiOperation(value = "导出事故信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "curPage", value = "当前页", dataType = "String", paramType = "query",required = true),
            @ApiImplicitParam(name = "pageSize", value = "分页大小", dataType = "String", paramType = "query",required = true)
    })
    public void exportAccidentInfo(String curPage, String pageSize, HttpServletResponse response){
        PageCondition<PcmsAccidentInfo> condition= PageCondition.<PcmsAccidentInfo>builder()
                .pageSize(Integer.parseInt(pageSize))
                .curPage(Integer.parseInt(curPage))
                .build();
        PageInfo<List<AccidentInfoVO>> list = accidentInfoService.getAccidentInfoList(condition);
        PoiUtils.exportExcel(list.getRows(),"事故信息表","事故信息",AccidentInfoVO.class,"事故信息表",response);
    }

    @PostMapping(value = "/importAccidentInfo")
    @ApiOperation(value = "导入事故信息")
    public void importAccidentInfo(@RequestBody MultipartFile file) throws Exception {
        PoiUtils.importExcel(file,AccidentInfoVO.class).forEach(System.out::println);
    }

}

2 结果展示

2.1 Excel导出

调用http://localhost:8080/accidentInfo/exportAccidentInfo?currentPage=1&pageSize=10导出Excel
保存Excel

2.2 Excel导入Excel导入结果

3 常见问题及解决方案

3.1 Excel导出失败

检查POJO是否存在@Excel注解

3.2 导入的数据,日期全为Null而其他类型数据正常

日期类型需要在@Excel的format属性中定义导入的日期格式,否则很可能会解析不出来

3.3 导入成功而导出失败,提示原因为ClassNotFound

像这种问题应该从两方面排查:

  1. 依赖冲突:已存在的依赖是否与EasyPOI的依赖有冲突,而代码实际执行的依赖是你另外导入的依赖版本,而不是poi自带的版本
  2. 版本太旧,可以尝试升级版本

4 一些建议

只导入你所需要的依赖,不然很容易冲突
比如EasyPOI的依赖,很多人喜欢按下面这种导入方法

      <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>3.2.0</version>
        </dependency>

分析一下上述依赖的包含关系:
1.web包含了base,而base包含了annotation,
2.web里面是在base基础上多了spring的依赖,但多数情况我们都会自定义spring的版本
故如果仅仅需要使用EasyPOI,只需要导入base即可

开发笔记 | EasyPoi快速学习实现excel导入导出 easypoi学习笔记 阅读详情

相关推荐

使用EasyPoi进行导入导出Excel(含多sheet导入导出操作)

本文算是对上篇使用EasyPoi根据模板导出Excel或word文档 的补充吧 主要是直接进行导入导出,下面给出一个补充的工具类吧 /** *Excle 文件导入导出Util(easypoi) * @ClassName:EasyPoiUtil * @author leon * @createDate 2018年11月29日 下午15:25:27 * @version v1.0...

xiao雷博客 1万+

使用EasyPoi导入、导出excel

使用EasyPoi导入、导出excel

weixin_39527642的博客 6272

easyPOI导入导出之下拉框

说起easypoi相信大家经常会用,因为在数据导入导出时,常用的也就是.xls文件进行上传下载,一般需要下载一个模板,然后再上传。在一次开发中,甲方提到一个需求,需要带下拉框的excel。于是我摸索了下,做个简单的笔记;如下 import cn.afterturn.easypoi.excel.annotation.Excel; import lombok.Data; /** * @ClassName test * @Description TODO * @Author zhanggesheng

m0_37549763的博客 3630

afterTurn.easypoi导出一对多数据为excel的简单使用

afterTurn.easypoi针对一对多关系数据导出使用,并使用两种不同的案例进行阐述

qq_43263883的博客 1267

RAG开源框架深度评测:从RAGFlow到Dify的实战选型指南

本文深度评测了主流RAG开源框架(RAGFlow、Dify、WeKnora)的核心能力与实战表现,提供企业级选型指南。重点对比了文档解析、检索性能和生产部署等关键指标,揭示RAGFlow在复杂文档处理、Dify在低代码开发、WeKnora在腾讯生态集成的差异化优势,并给出技术选型决策树与成本优化方案。

weixin_29294597的博客 828

Proteus 8.9仿真五路抢答器:从74LS148编码到NE555报警的保姆级电路拆解

本文详细解析了使用Proteus 8.9仿真五路抢答器的完整设计流程,从74LS148优先编码器到NE555定时报警电路。通过保姆级的电路拆解和芯片选型指南,帮助读者掌握数字电路中的编码、锁存、译码和定时等核心技术,实现稳定可靠的抢答系统仿真。

weixin_30836759的博客 381

Easypoi导出、导入excel

所需pom依赖: <!-- 引入EasyPoi包 --> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>4.1.0</version> </dependency> <de.

在下令狐的博客 7425

本地化搭建DeepSeek+RAGFlow,构建个人知识库

本地化搭建DeepSeek+RAGFlow,构建个人知识库。至少32G以上内存、500G以上空余磁盘空间。

gogospecter的专栏 7431

easypoi注解介绍

注解介绍 easypoi起因就是Excel的导入导出,最初的模板是实体和Excel的对应,model--row,filed--col 这样利用注解我们可以和容易做到excel到导入导出 经过一段时间发展,现在注解有5个类分别是 @Excel 作用到filed上面,是对Excel一列的一个描述 @ExcelCollection 表示一个集合,主要针对一对多的导出,比如一个老师对应多个科目,科目...

听风动的博客 7112

UDS诊断入门第一课:手把手教你玩转0x10会话控制服务(附ISO14229实战解析)

刚接触汽车电子诊断的工程师们,往往会被厚厚的ISO 14229标准文档和各种专业术语吓退。但就像学习编程要从"Hello World"开始一样,掌握UDS协议的最佳切入点就是0x10诊断会话控制服务。这个看似简单的服务,实际上是整个诊断系统的"钥匙"——它决定了ECU(电子控制单元)当前处于何种工作模式,直接影响着其他诊断服务的可用性。 在实际车辆诊断中,ECU默认处于DefaultSession模式,这种模式下许多高级诊断功能是被禁用的。想象一下你正在开发一个需要刷写ECU固件的工具,如果连最基本的会

weixin_30402343的博客 394

NVIDIA GR00T SONIC - 人形机器人强化学习全身控制入门教程(一)

SONIC 是一个类人行为基础模型,它为机器人提供了一套从大规模人类动作数据中学习而来的核心运动技能。与为每个动作单独构建控制器不同,SONIC 将动作追踪作为可扩展的训练任务,因此单一套统一策略即可产生自然的全身运动,并支持多种多样的行为。         🎯 主要特点: 🚶 自然的全身运动(行走、爬行、动态动作) 🎮 支持实时 VR 遥操作 🤖 高级规划与交互的基础 📦 即用型 C++ 推理栈

2506_90492529的博客 844

SpringBoot整合EasyPoi实现导入导出Excel

一、前言 平时我们写代码时常常需要一些导入导出的操作,一般都是用Apache的poi,但是发现很繁琐,总是在Copy… ,无意间发现一款简单粗暴的神器EasyPoi,导入导出很方便,而且支持多种格式的导入导出,下面介绍下基于@Excel注解导入导出Excel的步骤。 码云地址 :easypoi-spring-boot-starter 教程:EasyPoi 二、 功能 Excel自适应xls...

王小白来了 1万+

后仿真中的必懂VCS仿真选项之initreg和deposit

后仿真中,我们常常对于没有复位寄存器和存储器单元,使用仿真选项之initreg和deposit,两种处理方式。今天做总结。请注意:请勿将两者进行同时使用。对于到底选取哪种方式,要结合实际的情况决断。但是,两者同时使用,会有冲突,得不到预期结果。

那么菜的博客 4333

【easypoi】 实现excel导入导出(多sheet)

首先导入jar包: <!--EasyPoi导入导出--> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.0.3</version> ...

小葫芦的博客 2万+

Oracle EBS(R12+)通过Multi-Org 多组织架构、Multi-Ledger 多账簿、SLA 子分类账会计、多币种引擎、多会计政策并行五大核心能力,为跨国企业提供一体化、自动化、合规的

Oracle EBS(R12+)提供全球会计核算解决方案,通过Multi-Org多组织架构实现跨国集团数据隔离与共享,支持四层组织结构(业务组→法律实体→经营单位→库存组织)。Multi-Ledger多账簿功能允许一笔业务多准则自动核算,包含主账簿、辅助账簿和报告币种。系统内置多币种处理引擎,覆盖全流程货币业务,支持自动重估、再计量和折算。通过SLA子分类账会计实现多会计政策并行处理,满足不同国家会计准则和税制要求。该方案可同时支持本地法定、集团合并及管理分析需求,实现全球财务数据集中管理,提升合规性和运营

金牌架构师 554

【Bluetooth蓝牙开发】十一、一文秒懂 | 超详细的Bluez交叉编译

1、开篇词 2、蓝牙开发入门 3、蓝牙协议栈总览 4、蓝牙协议栈——物理层 5、蓝牙协议栈——链路层 6、蓝牙协议栈——传输层 7、蓝牙协议栈——L2CAP协议 8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议 10、蓝牙通信流程分析 11、蓝牙协议栈——Bluez交叉编译 12、蓝牙调试工具汇总

Donge's Blog 3979

easypoi Excel的导入导出(完整示例)

EasyPoi教程_V1.01. 前言 - Powered by MinDoc。

qq_14962815的博客 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

EasyPoi实现excel文件导入导出

EasyPoi 学习实践 1 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法. gitee开源: https://gitee.com/lemur/easypoi 官方文档1: http://easypoi.mydoc.io/ 官方文档2: http://doc.wupaas.com/docs/easypoi/ea

学习技术的路上不断沉淀自己 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SpringBoot集成EasyPoi(Excel导入导出)

1.导入jar包 <!--EasyPoi导入导出--> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> &lt...

吃四碗饭的嘤嘤怪的博客 4万+

Easypoi实现excel多sheet表导入导出功能

Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写。 第一步引入Easypoi依赖 <!-- 导出文件工具 EasyPoi实现Excel读写管理测试用例 --> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-s.

tester_runing的博客 5189

使用EasyPoi导入导出Excel

导入 目录 - 先写model - 再写controller - 最后写service 在这之前先引入依赖 <!-- Excel导入导出--> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <versio

weixin_47615289的博客 3662

EasyPOI 操作Excel 实战总结

EasyPOI 学习总结

北执南念的博客 1万+

Springboot 基于EasyPoi的excel导入导出

EasyPoi功能如同名字easy一样,主打的就是容易,让一个没见过也没接触过poi的人员就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板于洋,完成以前复杂的写法。EasyPoi起因就是Excel的导入导出,最初的模板时实体和Excel的对应。model-row,filed-col这样利用注解我们可以容易做到excel的导入导出。经过一段时间发展,现在注解有5个,分别是:@Excel作用到filed上面,是对Excel一列描述。

baidu_38945557的博客 2178

使用EasyPoi轻松导入导出Excel文档

提到Excel的导入导出,大家肯定都知道alibaba开源的EasyExcel,该项目的github地址为:https://github.com/alibaba/easyexcel。 这个项目非常活跃,项目诞生的目的就是为了简化开发、降低内存消耗。我项目中也用过,但还是有一些槽点的,比如文档很简陋,功能做的不完善,不支持图片的读取等。所以,今天给大家推荐另外一款Excel处理的工具:EasyPo...

十步杀一人-千里不留行 4495

EasyPoi 教程

文章目录EasyPoi教程文档1. 前传1.1 前言这个服务即将关闭,文档迁移到 http://www.wupaas.com/ 请大家访问最新网站1.2 Easypoi介绍1.3 使用1.4 测试项目1.5 可能存在的小坑2. Excel 注解版2.1 Excel导入导出2.2 注解注解介绍@ExcelTarget@ExcelEntity@ExcelCollection@ExcelIgnore2.3 注解导出,导入2.3.1 对象定义2.3.2 集合定义2.3.3 图片的导出2.3.4 Excel导入介绍2

m0_58680865的博客 1万+

easypoi插件导入导出的使用细节

一.导入导出的认识 操作办公软件(word,excel,ppt) 03,07 JXL(只支持excel,内存优化) POI(功能强大,支持广泛) POI的基本使用 1.1 导包 &lt;!-- poi支持的jar包 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.poi&lt;/groupId&gt; &lt;artifact...

weixin_44168789的博客 9310
上一篇: 公安系统:人脸应用相关实践
下一篇: Springboot下Ehcache的基本使用:附带工具类,快来围观吧
一步一结
博客等级 码龄7年 50粉丝 65原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值