java_项目_EasyPoi导入与导出

【java】EasyPoi导出导入(合并单元格) 【代码】【java】EasyPoi导出导入(合并单元格) 阅读详情

1 Java操作Excel

1.1 概念

jxl:只能对Excel进行操作,属于比较老的框架。
POI:是apache的项目,可对ms的word,Excel,PPT进行操作,包括office2003和2007。对两种版本的处理都比较好。具体操作请看官方的文档
在这里插入图片描述

1.2 JXL与POI优缺点

JXL优点(韩国人开发):

  1. Jxl对中文支持非常好,操作简单,方法看名知意。
  2. Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写
  3. 支持Excel 95-2000的所有版本(网上说目前可以支持Excel2007了,还没有尝试过)
  4. 生成Excel 2000标准格式
  5. 支持字体、数字、日期操作
  6. 能够修饰单元格属性
  7. 支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

缺点:效率低,图片支持不完善,对格式的支持不如POI强大

POI优点:

  1. 效率高
  2. 支持公式,宏,一些企业应用上会非常实用
  3. 能够修饰单元格属性
  4. 支持字体、数字、日期操作
  5. 支持03和07的版本

缺点:不成熟,代码不能跨平台,兼容性不是那么好

1.3 引入poi需要的jar包

<!-- poi支持的jar包 -->
<dependency>
 <groupId>org.apache.poi</groupId>
 <artifactId>poi</artifactId>
 <version>3.11</version>
</dependency>
<dependency>
 <groupId>org.apache.poi</groupId>
 <artifactId>poi-ooxml</artifactId>
 <version>3.11</version>
</dependency>

1.4 创建Excel(完成99乘法表)

//导入
@Test
public void readExcel()throws Exception{
    //读取文件
    FileInputStream fis = new FileInputStream(new File("empread.xlsx"));
    //得到工作薄
    Workbook wb = new XSSFWorkbook(fis);
    //2.拿到第个sheet表
    Sheet sheet = wb.getSheetAt(0);
    //3.拿到wb中的行(不要拿头部)
    int lastRowNum = sheet.getLastRowNum();
    for (int i = 2; i <= lastRowNum; i++) {
        Row row = sheet.getRow(i);
        //4.拿到每一列(格子)
        short lastCellNum = row.getLastCellNum();
        for (int j = 0; j < lastCellNum; j++) {
            Cell cell = row.getCell(j);
            System.out.print(cell.getStringCellValue()+" ");
        }
        System.out.println();
    }
}

1.5 java读取Excel

/**
 * 读取我们使用相应的方案
 * @throws Exception
 */
@Test
public void readExcel() throws Exception{
    File file = new File("employee-3.xlsx");
    FileInputStream fis = new FileInputStream(file);
    //1.读取一个Excel文件(内存中)
    Workbook wb = new XSSFWorkbook(fis);
    //2.拿到第个sheet表
    Sheet sheet = wb.getSheetAt(0);
    //3.拿到wb中的行(不要拿头部)
    int lastRowNum = sheet.getLastRowNum();
    for (int i = 1; i <= lastRowNum; i++) {
        Row row = sheet.getRow(i);
        //4.拿到每一列(格子)
        short lastCellNum = row.getLastCellNum();
        for (int j = 0; j < lastCellNum; j++) {
            Cell cell = row.getCell(j);
            System.out.print(cell.getStringCellValue()+" ");
        }
        System.out.println();
    }
}

2 EasyPoi使用

2.1 引入easypoi的jar包

特别注意:把之前咱们的POI引入去掉(有冲突)

<!-- 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>

2.2 基本导出

在字段上面添加注解

@Entity
@Table(name="employee")
public class Employee extends BaseDomain {
    @Excel(name="用户名")
    private String username;
    private String password;
    @Excel(name="邮件",width = 25)
    private String email;
    @Excel(name="年纪")
    private Integer age;

    @Excel(name = "头像",type = 2,savePath = "/images/head",height = 23)
    private String headImage; //头像

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="department_id")
    //Json Ignore(忽略) Properties(属性)
    //@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
    @ExcelEntity
    private Department department;
...

部门有相应的关连
@Entity
@Table(name="department")
public class Department extends BaseDomain {

    @Excel(name = "部门名称")
    private String name;

2. 3员工页面 Employee.jsp 加上导出按钮

<form id="searchForm" action="/employee/download">
    用户名: <input name="username" class="easyui-textbox" style="width:80px">
    邮件: <input name="email" class="easyui-textbox" style="width:80px">
    部门:<input name="departmentId" class="easyui-combobox" name="dept"
              panelHeight="auto"
              data-options="valueField:'id',textField:'name',url:'/util/dept'" />

    <a href="#" class="easyui-linkbutton" data-method="search" iconCls="icon-search">查询</a>
    <!--  button不加type属性就是提交 -->
    <button class="easyui-linkbutton" iconCls="icon-search">导出</button>
</form>

2.4 EmployeeController添加方法

@RequestMapping("/download")
public String download(ModelMap map , EmployeeQuery employeeQuery, HttpServletRequest request){
    List<Employee> employees = employeeService.findByQuery(employeeQuery);

    String realPath = request.getServletContext().getRealPath("");
    for (Employee employee : employees) {
        employee.setHeadImage(realPath+employee.getHeadImage());
    }

    //设置一些属性
    ExportParams params = new ExportParams("员工管理", "明细", ExcelType.XSSF);
    //冻结列
    params.setFreezeCol(2);
    map.put(NormalExcelConstants.DATA_LIST, employees); // 数据集合
    map.put(NormalExcelConstants.CLASS, Employee.class);//导出实体
    map.put(NormalExcelConstants.PARAMS, params);//参数
    map.put(NormalExcelConstants.FILE_NAME, "employee");//文件名称

    //返回字符串就给我们返回对应的页面

    return NormalExcelConstants.EASYPOI_EXCEL_VIEW;//View名称
    //return "forward:/WEB-INF/views/employee.jsp";
}

特别注意:要使用 return NormalExcelConstants.EASYPOI_EXCEL_VIEW
spring的.xml 需要加上

<!-- 扫描easypoi的一些view:视图 -->
<context:component-scan base-package="cn.afterturn.easypoi.view" />
<!-- bean的视图解析器  p:order="0":顺序在最前面 -->
<bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"
      p:order="0" />

3 EasyPoi导入功能

3.1 ImportController添加功能

@Controller
@RequestMapping("/import")
public class ImportController {
    @Autowired
    private IDepartmentService departmentService;
    @Autowired
    private AisellEmployeeVerifyHander aisellEmployeeVerifyHander;
    @Autowired
    private IEmployeeService employeeService;
    @RequestMapping("/index")
    public String importPage(){
        return "import";
    }
    //导入功能
    @RequestMapping("/employeeXlsx")
    public String employeeXlsx(MultipartFile empFile, HttpServletResponse response) throws Exception {
        //处理上传文件
        ImportParams params = new ImportParams();
        params.setTitleRows(1);
        //开启验证
        params.setNeedVerfiy(true);
        //开启自定义验证
        params.setVerifyHandler(aisellEmployeeVerifyHander);
        //excel导入的一个结果
        ExcelImportResult<Employee> result = ExcelImportUtil.importExcelMore(
                empFile.getInputStream(),
                Employee.class, params);
        for (Employee employee : result.getList()) {
            //根据部门查询部门对象
            String deptName = employee.getDepartment().getName();
            Department department = departmentService.findDepartmentByName(deptName);
            //设置部门
            employee.setDepartment(department);
            employee.setPassword("123");
            //保存数据
            employeeService.save(employee);
        }
        //错误的数据
        if(result.isVerfiyFail()){
            Workbook failWorkbook = result.getFailWorkbook();
            //把这个文件导出
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); //mime类型
            response.setHeader("Content-disposition", "attachment;filename=error.xlsx");
            response.setHeader("Pragma", "No-cache");//设置不要缓存
            OutputStream ouputStream = response.getOutputStream();
            failWorkbook.write(ouputStream);
            ouputStream.flush();
            ouputStream.close();
        }
        return "import";
    }
}

3.2 自定义验证功能

扫描它,把它交给Spring管理

<context:component-scan base-package="cn.itsource.aisell.common" />

准备java类AisellEmployeeVerifyHander

@Component
public class AisellEmployeeVerifyHander implements IExcelVerifyHandler<Employee> {
    @Autowired
    private IEmployeeService employeeService;
    @Override
    public ExcelVerifyHandlerResult verifyHandler(Employee employee) {
        //employee导入的时候  传过来的数据
        ExcelVerifyHandlerResult result = new ExcelVerifyHandlerResult(true);
        //如果什么都没有处理  通过  返回true
        //如果检测失败过后  返回false  并且设置信息
        boolean flag = employeeService.checkUsername(employee.getUsername());
        if (!flag){
            result.setMsg("用户名重复");
            result.setSuccess(false);
        }
        return result;
    }
}
easypoi导出工具类-代码含java代码、jar包以及pom依赖 easypoi实现上百万大数据导出excel工具,需要引入3.0.1版本easypoi相关依赖即可,该工具类也提供自定义动态标题,动态填充数据实现导出数据功能(但此功能最大导出为6w,导出大数据请用工具中的另一个方法,亲测有效) 立即下载

相关推荐

Python量化交易实战:从零搭建你的第一个多因子选股模型(附完整代码)

本文是一份详细的Python量化交易入门实战指南,手把手教你从零搭建第一个多因子选股模型。内容涵盖环境配置、数据获取、因子挖掘与有效性检验、多因子合成以及完整的策略回测与绩效评估,并附有可直接运行的完整代码,帮助初学者快速掌握量化交易的基本概念与实践流程。

resnet7explorer的博客 931

使用EasyPoi导入导出

1.EasyPOI简介 1.1 easypoi是什么 easypoi 就是对poi进行封装,主打简单,do less do more ,就算不懂底层的poi的操作 ,也可以操作导入导出,而且提供的功能在项目里够用 1.2 easypoi的特点 1.设计精巧,使用简单 2.接口丰富,扩展简单 3.默认值多,write less do more 4.spring mvc支持,web导出可以简单明了 2...

qq_43853427的博客 749

AI 小说生成器本地部署完全指南

这篇文章介绍了本地部署AI小说生成器的完整指南,主要面向网文作者、内容创作者和AI爱好者。文章从环境搭建到创作实践,详细讲解了三种主流部署方案:Ollama(推荐新手)、LMStudio(图形界面)和text-generation-webui(高级定制)。内容涵盖硬件需求、系统架构、模型选择、API对接、提示词工程等关键技术环节,并提供了小说创作的特制提示词模板和参数调优建议。文章还讨论了长篇小说管理、多模型协作等进阶技巧,以及版权伦理等法律问题。最后推荐了相关工具资源和社区论坛,帮助读者实现安全、高效、可

珂珂可爱多 2232

java实现easypoi导入数据

今天是生气的一天

qq_40609490的博客 1275

Linux双网卡设置IP属于同一网段的ping方法以及现象记录分析

文章目录前言ping以及MAC地址总结 前言 写在前面:经常遇到客户将板卡上的两个网络设备的IP地址设置为同一网段的情况,比如eth0:192.168.0.232,eth1:192.168.0.30. 我的解释是,不能设置为同一网段,或者使用其中一个时候下线另外一个网卡。但是我不知道这个说法到底是根据什么,查了很多资料也没找到明确的说法,但是下面这个实验能够说明一些现象的原因。 ping以及MAC地址 首先查看网卡的信息 ifconfig 因为两个网卡都在同一个网段,所以如果这个时候直接和我们的主机(I

“逛丢一只鞋”的博客 1万+

在 SAP BTP ABAP 环境里直连 ABAP On-Premise OData

摘要 SAP BTP ABAP Environment 2311版本后,OData集成链路迎来重大改进:Service Consumption Model升级为v2版本,通过压缩模型到单一类减少对象数量;通信管理推荐采用Communication Arrangement替代传统Destination,提供更清晰的治理边界。新版支持同时生成OData v2/v4消费模型,并通过标准工厂类创建代理。配置需关注四层对象:Outbound Service声明协议入口,Scenario定义认证方式,System描述通

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1917

Easypoi一对多实现导入

2.1 创建 CertificateConfigCluster 实体类/*** @Excel(needMerge = true) 是否要合并单元格* @Excel(importFormat = "yyyy-MM-dd") importFormat 导入时候处理xls表格的日期格式* @Excel 注解中 还有很多的属性 比如字段判空 等等 大家可以上官网自行查看*/ /*** @Fields certificateName 证书名称。......

aq_money的博客 3395

wflow模型hbv

毛管水的处理 😄 快速流的处理 K4是为了产生基流的 找到了令人激动的kenematic模块 😄

m0_46268055的博客 777

JAVA实现easypoi批量导入

第二种:添加必填字段校验(存在错误数据)ImportParams 参数介绍下。第一种:简单的导入(无校验)第三种:必填校验加自定义校验。

m0_46300599的博客 2285

YOLOv8【第九章:模型部署篇·第2节】一文搞懂,模型剪枝与压缩技术!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1523

AIO-1126-JD4(RV1126)蓝牙通讯(BLE)

AIO-1126-JD4采用了正基科技推出的一款集成WiFi、蓝牙功能的模组AP6236,支持高速(HS)功能的蓝牙 4.0,集成了 1.5 类功率放大器(PA),并支持低功耗蓝牙(BLE)。提到正基就不得不提下博通。博通和正基是芯片技术与模块制造方面的合作关系,正基科技是中国台湾的公司,在无线通信模块领域有一定的市场份额,博通则是全球领先的有线和无线通信半导体公司。正基把包含博通关键IP的核心芯片和自家的射频部分等封装在一起,即SIP(System In Package)。

w1820020635的博客 1121

java使用easypoi导入,导出

第一步,先引入easypoi依赖: <!-- easypoi 核销包 --> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.2.0</version> <

格林王子举哥 7816

PD详解—第一章—Type-C连接

Type-C连接 今天大师匈下班比较早,再给大家侃一侃PD,希望大家支持。 PD和Type-c的关系 首先讲一下PD快充的实现步骤,本文主要是Source端(电源),Sink端的差不多也一样,只是策略不同而已。 TypeC连接-->广播电源能力Source capbility(数据交互)->打电压电流->等待其他指令。 所以typec连接是第一步,很多人会从字面意思理解typec连接,这不就是把线给插上去就好了吗? 不知道有没有优秀的同学想到正确答案; 正确答案:typec连接的本质是为

大师匈的博客 1万+

java poi 导入导出excel简单实例源代码_EasyPOI操作Excel神器、从零入门&项目实战教程...

点击左上角【关注】云课堂101订阅号,收获更多加薪秘籍。本文共784字,阅读全文约5分钟。云课堂101—你的掌上图书馆,加入会员,千门课程免费学:职场提升、创业理财、健康变美、婚恋情感、生活娱乐等课程,荔枝微课正版课程返现30%,送电子书会员。教程介绍我们不造轮子,只是轮子的搬运工。(其实最好是造轮子,造比别人好的轮子)开发中经常会遇到excel的处理,导入导出解析等等,java中比较流...

weixin_39710288的博客 122

Devexpress16.2.6破解工具

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

EasyPoi 开源项目教程

EasyPoi 开源项目教程 1. 项目的目录结构及介绍 EasyPoi 是一个用于简化 Excel 和 Word 文档处理的 Java 库。以下是项目的目录结构及其介绍: easypoi/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── cn/ │ │ │ │ ├── afterturn/ │ │ │ ...

gitblog_01056的博客 682

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SpringBoot整合EasyPoi实现Excel的导入导出

poi的在线api文档 easypoi官方文档 poi导入导出Excel表格 public class EasyPoiDemo { //创建九九乘法表 @Test public void testWrite() throws IOException { //在内存中创建excel文件 SXSSFWorkbook workbook = new SXSSFWorkbook(); //创建一张表 SXSSFSheet sh

user2025的博客 2466

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

easyexcel多个sheet导入_Java中Easypoi实现excel多sheet表导入导出功能

Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写。第一步引入Easypoi依赖cn.afterturneasypoi-spring-boot-starter4.2.0Easypoi的注解使用说明(存留查看即可)第二步定义对应表格头数据对象实体类(注解的使用可以查阅上面的按需使用即可)@Setter@Getter@ToStringpublic clas...

weixin_42515100的博客 936

【开发心得】EasyPoi导入导出的基本使用

网上关于Java导入导出Excel 的文章比较多,相对的坑也比较多(或者因为读者个人水平),特根据自己日常开发中的踩坑,写点东西。 1.常见的Java领域Excel导入导出的类库,基础库(Apache common POI,JExcelAPI,JXL等等...),个人觉得apache的这个可能更好一些,毕竟贡献者多,但是有一个很大的问题,就是每次大版本更新,变动就会很大,博主有一篇文章是阐述从低...

清风唱诗人的博客 1352

easypoi导出,导入excel

在pom.xml引入easypoi的依赖包: &lt;!--easypoi --&gt; &lt;dependency&gt; &lt;groupId&gt;cn.afterturn&lt;/groupId&gt; &lt;artifactId&gt;easypoi-base&lt;/artifactId&gt; &lt;version&gt;3.2.0&

baidu_41660182的博客 437

Java接入EasyPoi简易技术文档

本文介绍了如何在Java项目中接入EasyPoi,并提供了一些基本的导入和导出示例。通过EasyPoi,您可以方便地实现Excel文件的导入和导出功能,并使用注解来指定字段与Excel文件的映射关系。希望本文对您有所帮助!

m0_50109235的博客 620

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

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

小葫芦的博客 2万+

springboot搭配easypoi轻松应对excel导入导出

开发中经常会遇到excel的处理,导入导出解析等等,java中比较流行的用poi,但是每次都要写大段工具类来搞定这事儿,此处推荐一个别人造好的轮子easypoi,下面介绍下“轮子”的使用。 pom引入 不再需要其他jar <dependency> <groupId>cn.afterturn</grou...

qq_42682302的博客 541

JAVA通过Easypoi实现后端接口模板导出和数据导入

easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 特点 1.设计精巧,使用简单 2.接口丰富,扩展简单 3.默认值多,write less do more 4.spring mvc支持,web导出可以简单明了 1、依赖引入 如果是使用springmvc的便捷,可直接引入easypoi-base <depen

CodeMan丶 1519

【springboot+easypoi】一行代码搞定excel导入导出

我们不造轮子,只是轮子的搬运工。(其实最好是造轮子,造比别人好的轮子) 开发中经常会遇到excel的处理,导入导出解析等等,java中比较流行的用poi,但是每次都要写大段工具类来搞定这事儿,此处推荐一个别人造好的轮子【easypoi】,下面介绍下“轮子”的使用。 pom引入 不再需要其他jar &lt;dependency&gt; &lt...

kris1122的博客 422

EasyPOI(一)注解导出Demo

EasyPOI导出Demo Entity public class User extends BaseEntity<Long> { /** 用户名. */ @Excel(name="用户名", width = 30) private String username; /** 密码. */ @Excel(name="密码", width = 30...

ACGkaka的博客 1061

EasyPOI报表的使用及对象嵌套的Excel报表导入导出

EasyPOI报表 介绍 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 。 官网文档地址:http://doc.wupaas.com/docs/easypoi/easypoi-1c0u4mo8p4ro8 使用 <!--easyPoi依赖 --> <dependency&g

weixin_46067095的博客 6217
上一篇: Shiro_项目_权限判断&菜单配置
下一篇: Shiro_项目_采购单
虞铭轩、
博客等级 码龄7年 3粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值