介绍:
对Apache POI 3.9的简单封装,实现Excel的导出导入功能。使用Annotation定义导出导入字段。http://jeesite.com
优点:
- 简单易用,支持大数量导出,配置简单,代码量少。
- 支持Excel 2003、2007、2010(xls、xlsx)格式。
- 支持简单格式设置,对齐方式,排序等
- 可导出字典类型数据,自定义数据字段类型(例如:部门关联对象,部门名称与部门编号互转)。
- 无需建立导入模板,系统自动生成。
缺点:
- 格式单一,无法导出格式比较复杂的表格。
- 不能使用模板进行导入,导出。
使用示例:
1、导出实体对象中的annotation的定义(ExcelField说明见:5、ExcelField定义说明):
@Entity @Table(name = "sys_user") public class User extends BaseEntity { private Long id; // 编号 ... ... ... private List<Role> roleList = Lists.newArrayList(); // 拥有角色列表 @Id @ExcelField(title="ID", type=1, align=2, sort=1) public Long getId() { return id; } @ManyToOne @ExcelField(title="所属区域", align=2, sort=10) public Area getArea() { return area; } @ManyToOne @ExcelField(title="所属部门", align=2, sort=20) public Office getOffice() { return office; } @Length(min=1, max=100) @ExcelField(title="姓名", align=2, sort=40) public String getName() { return name; } @Length(min=0, max=100) @ExcelField(title="用户类型", align=2, sort=80, dictType="sys_user_type") public String getUserType() { return userType; } @ExcelField(title="创建时间", type=0, align=1, sort=90) public Date getCreateDate() { return createDate; } @ExcelField(title="最后登录日期", type=1, align=1, sort=110) public Date getLoginDate() { return loginDate; } @ManyToMany @ExcelField(title="拥有角色", align=1, sort=800, fieldType=RoleListType.class) public List<Role> getRoleList() { return roleList; } }
2、Excel导出示例:
public String exportFile(User user) { try { String fileName = "用户数据"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx"; // 查询数据 Page<User> page = systemService.findUser(new Page<User>(request, response, -1), user); // 1:创建Excel导出对象;2:设置数据;3:写入输出流;4:临时数据销毁 new ExportExcel("用户数据", User.class) .setDataList(page.getList()) .write(response, fileName) .dispose(); return null; } catch (Exception e) { addFlashMessage("导出用户失败!失败信息:"+e.getMessage()); } return "redirect:"+BaseController.ADMIN_PATH+"/sys/user/?repage"; }
3、Excel 导入示例:
public String importFile(MultipartFile file) { try { int successNum = 0; int failureNum = 0; StringBuilder failureMsg = new StringBuilder(); // 创建导入Excel对象 ImportExcel ei = new ImportExcel(file, 1, 0); // 获取传入Excel文件的数据,根据传入参数类型,自动转换为对象 List<User> list = ei.getDataList(User.class); // 遍历数据,保存数据 for (User user : list){ try{ if ("true".equals(checkLoginName("", user.getLoginName()))){ user.setPassword(SystemService.entryptPassword("123456")); BeanValidators.validateWithException(validator, user); systemService.saveUser(user); successNum++; }else{ failureMsg.append("<br/>登录名 "+user.getLoginName()+" 已存在; "); failureNum++; } }catch(ConstraintViolationException ex){ failureMsg.append("<br/>登录名 "+user.getLoginName()+" 导入失败:"); List<String> messageList = BeanValidators.extractPropertyAndMessageAsList(ex, ": "); for (String message : messageList){ failureMsg.append(message+"; "); failureNum++; } }catch (Exception ex) { failureMsg.append("<br/>登录名 "+user.getLoginName()+" 导入失败:"+ex.getMessage()); } } if (failureNum>0){ failureMsg.insert(0, ",失败 "+failureNum+" 条用户,导入信息如下:"); } addFlashMessage("已成功导入 "+successNum+" 条用户"+failureMsg); } catch (Exception e) { addFlashMessage("导入用户失败!失败信息:"+e.getMessage()); } return "redirect:"+BaseController.ADMIN_PATH+"/sys/user/?repage"; }
4、Excel 导入模板下载示例
public String importFileTemplate() { try { String fileName = "用户数据导入模板.xlsx"; List<User> list = Lists.newArrayList(); list.add(UserUtils.getUser(true)); // 第三个参数设置为“2”表示输出为导入模板(1:导出数据;2:导入模板) new ExportExcel("用户数据", User.class, 2).setDataList(list).write(response, fileName).dispose(); return null; } catch (Exception e) { addFlashMessage("导出用户失败!失败信息:"+e.getMessage()); } return "redirect:"+BaseController.ADMIN_PATH+"/sys/user/?repage"; }
5、ExcelField定义说明:
/** * Copyright © 2012-2013 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); */ package com.thinkgem.jeesite.common.utils.excel.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Excel注解定义 * @author ThinkGem * @version 2013-03-10 */ @Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface ExcelField { /** * 导出字段名(默认调用当前字段的“get”方法,如指定导出字段为对象,请填写“对象名.对象属性”,例:“area.name”、“office.name”) */ String value() default ""; /** * 导出字段标题 */ String title(); /** * 字段类型(0:导出导入;1:仅导出;2:仅导入) */ int type() default 0; /** * 导出字段对齐方式(0:自动;1:靠左;2:居中;3:靠右) */ int align() default 0; /** * 导出字段字段排序(升序) */ int sort() default 0; /** * 如果是字典类型,请设置字典的type值 */ String dictType() default ""; /** * 反射类型 */ Class<?> fieldType() default Class.class; }
相关推荐
在Java开发中,对于数据的导入导出,尤其是Excel表格,是一种非常常见的需求。而easypoi为我们提供了简洁的方式来实现这一功能。 ### eapoi导出导入概述 easypoi是一个基于Apache POI的简单易用的Java Excel操作...
《使用Easy-Poi进行Excel导入导出的实践详解》 在现代企业中,数据处理是一项不可或缺的任务,而Excel作为常见的数据存储和分析工具,其导入导出功能在各种业务场景中发挥着重要作用。Easy-Poi是一款优秀的Java库,...
在Java编程领域,Excel的导入导出是一项常见的需求,特别是在数据处理、报表生成以及数据分析等场景。本篇文章将深入探讨如何使用Java注解的方式实现Excel的导入导出功能。 首先,我们要理解Java注解(Annotation)...
在实际业务场景中,我们经常需要处理Excel数据的导入和导出,这在数据分析、报表生成等方面非常常见。本篇文章将详细介绍如何在Spring MVC项目中使用Apache POI库来实现Excel的导入和导出。 Apache POI是Apache软件...
在本文中,我们将深入探讨如何使用SpringBoot框架来实现后端接口,以便处理Excel文件的导出和批量导入功能。SpringBoot以其简化Spring应用开发的特性,成为了Java开发者广泛采用的工具。它允许我们快速构建可运行的...
Spring 的 Annotation-Driven 配置事务管理器详解(多数据源配置) Spring 框架提供了强大的事务管理机制,通过使用 Annotation-Driven 配置,可以方便地管理事务。在多数据源配置中,spring 的 Annotation-Driven...
Easypoi是一个强大的Java操作Excel的工具,支持Excel的读写,特别适用于处理大量数据的导入导出。下面我们将详细阐述这一过程。 首先,我们需要在SpringBoot项目中引入Easypoi的相关依赖。Easypoi提供了注解方式来...
在Java开发中,数据的导入导出经常涉及到各种表格格式,如Excel,这在数据分析、报表生成、数据交换等场景中十分常见。EasyPOI是一个优秀的开源库,它简化了Java与Excel之间的交互,提供了方便快捷的表格导入导出...
在Java编程中,导出Excel是一项常见的需求,特别是在数据分析、报表生成或数据交换等场景下。基于注解的导出方式可以提供更加简洁、灵活的代码实现,减少重复工作,并提高代码可读性。本篇将详细介绍如何使用注解与...
使用POI库中的`XSSFWorkbook`和`SXSSFWorkbook`(适用于大数据量导入,内存占用较小)来读取Excel文件。以下是一个简单的示例: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf....
### POI导入导出及Spring框架综合应用 #### 一、Apache POI简介与核心功能 Apache POI是Apache软件基金会的Jakarta项目中的一个子项目,它为Java程序员提供了一组API,使得他们能够使用Java来操作Microsoft Office...
在Java编程中,Apache POI库是一个非常流行的用于...以上就是使用Apache POI 5.0在Java中实现Excel导入导出功能的基本步骤。在实际应用中,还需要考虑错误处理、数据验证、格式化等细节,确保代码的健壮性和用户体验。
本文将深入探讨如何使用注解反射技术来实现Excel自定义中文表头的导出,结合数据库查询的数据,以实现更加灵活和人性化的数据展示。 首先,让我们了解什么是注解(Annotation)。注解是Java提供的一种元数据,它...
在"struts2 使用Annotation 配置的小例子"中,我们可能会看到以下几个核心的Annotation: 1. `@Action`: 这个Annotation用于标记一个方法作为Struts2的动作。你可以指定该动作的名称、结果类型、以及它将执行的类。...
标签中的"POI Excel 数据导出"指明了主要的技术点,即使用POI库处理Excel文件进行数据的导入和导出。在这个过程中,你可能需要了解如何设置单元格样式、合并单元格、插入图表、处理日期和数字格式等高级特性。 在...
首先,启用Spring的Annotation配置需要在`beans.xml`配置文件中添加特定的命名空间和元数据。以下是启用Annotation配置的关键步骤: ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p=...
以上就是一个基于SpringBoot、Maven、Apache POI以及自定义注解和反射实现Excel导入导出的简单示例。通过这种方式,我们可以灵活地控制Excel数据的处理,同时降低了代码的耦合度,提高了可维护性。在实际项目中,你...
这篇博文"基于Annotation的Servlet配置"探讨了如何使用注解来配置Servlet,让我们深入理解这一现代Web应用开发中的重要概念。 首先,我们来看`@WebServlet`注解。这个注解是Java Servlet API的一部分,可以直接在...
赠送jar包:javax.annotation-api-1.2.jar; 赠送原API文档:javax.annotation-api-1.2-javadoc.jar; 赠送源代码:javax.annotation-api...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。