Java开发篇 - 使用alanpoi实现excel的导入导出(短短几行代码就可以)

简介: 短短几行代码就可以, 使用alanpoi实现excel的导入导出

一、前言

最近在做数据平台的系统设计与开发,里面有功能需要将界面数据导出到excel上,新来的开发同事对导入excel不熟悉,在网上找了半圈,都是JXL、POI、Easyexcel等excel操作工具类,对于jxl、poi,相信很多资深的小伙伴可能都比较熟悉,这2个是比较旧的一批excel,word,pdf操作的工具类,但是它们的api及语法都比较复杂,有些对中文的处理方式也不是很友好。

而Easyexcel正是为了解决jxl/poi不好用/难用的问题而产生的,它是阿里出品的,从API及代码对接上都作了很多精简,是一个比较不错的选择。Easyexcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。

那么,还有没有其他excel操作的框架呢?能比较快速的实现导入导出呢。

二、alanpoi

经过一番的查找,发现一个叫alanpoi的excel操作框架,实现excel的导出更加简单便捷,于是赶紧在项目中使用。
项目中使用:

<dependency>
    <groupId>com.alanpoi</groupId>
    <artifactId>alanpoi-analysis</artifactId>
    <version>1.3.0</version>
</dependency>

简单一句话:一配置一继承一调用

三、怎么使用alanpoi实现导入?

1、 配置

在项目resources目录中新建excel-config.xml文件,cosume中配置自己的消费类路径,继承ExcelConsumeInterface接口,sheet中的vo是把当前sheet序列化的对象路径,column中当然就是配置vo中的属性了。

其中name可选字段,填了就是按照这个匹配excel列名,不填就是按照offset顺序;导入包含多个sheet就配置多个

<?xml version = "1.0" encoding = "GB2312"?>
<exg name="excelId" version="1.0" file-type="excel">
  <excel id="ACCOUNT" consume="com.xxx.FinAccountImportHandler">
     <sheet index="0" row-start="1" column-start="0"
            vo="com.xxx.vo.FinAccountImportVO">
         <column name="公司/供应商编号" offset="1">companyCode</column>
         <column name="公司/供应商名称" offset="2">companyName</column>
         <column name="银行账号" offset="3">bankAccount</column>
         <column name="开户银行" offset="4">bankName</column>
     </sheet>
 </excel>
</exg>

2、 代码编写

想要扩展自己的excel实现,需要继承ExcelConsumeInterface接口,实现方法以下的方法:

/**
 * when error will 调用
 *
 * @param excelError
 */
void error(ExcelError excelError);

/**
 * custom valid data
 *
 * @param workbookId
 * @param sheetDataList
 */
void validData(String workbookId, List<ExcelSheetData> sheetDataList, Map<Serializable, Object> excelParam);

/**
 * @param sheetDataList return success data
 */
void end(List<ExcelSheetData> sheetDataList, Map<Serializable, Object> excelParam);

4、怎么调用?

在需要导入的代码中,调用ExcelExportUtil类的customImportData即可,参数excelId就是excel-conifg.xml中配置的id

四、如何导出呢?

在代码中,如果能够用一行代码实现绝不用第二行,如果一行不行,那就再加一行!哈哈

1、导出API介绍

注解模式导出:

  • ExcelSheet注解: 用于导入类上,可制定sheet名,列头的颜色、字体、高度、宽度
  • ExcelColum注解: 用于导入类的属性上,可指定列头的名称,单元格的样式
  • DateFormat注解: 用于导入类的属性上, 可以按照指定格式输出到excel,默认"yyyy/MM/dd"
  • NumFormat注解: 用于导入类的属性上,可以按照指定格式输出到excel,默认"00.00"
  • 样例:
@ExcelSheet(name = "测试", backColor = AlanColors.GREEN, font = "宋体", fontSize = 25)
@Data
public class ExportVO {
   
    @ExcelColumn(name = "名称", width = 32, link = "${url}")
    private String name;
    @ExcelColumn(name = "值")
    private String value;
    @ExcelColumn(name = "金额")
    @NumFormat(value = "0000.00##") 
    private BigDecimal amount;
    @ExcelColumn(name = "时间格式化") 
    @DateFormat(value = "yyyy-MM-dd hh:mm:ss") 
    private Date dateTime;
    @DateFormat
    @ExcelColumn(name = "日期格式化")
    private java.sql.Date date;
    @ExcelColumn(isExist = false)
    private String url;
}

2、 输出的方式

  • 方式一. 直接导出到浏览器
ExcelExportUtil.export(Colletion<?>,Class,HttpServletRequest,HttpServletResponse,fileName);
  • 方式二. 调用getWorkbook获取工作表,自行处理workbook
ExcelExportUtil.getWorkbook(Collection<?> singleSheetData, Class<?> c)

3、 高级用法介绍

  • 示例一:导出指定列(动态导出列)
List<ExportVO> list = new ArrayList<>();
for (int i = 0; i < 500; i++) {
   
    ExportVO exportVO = new ExportVO();
    exportVO.setName("name" + i);
    exportVO.setValue(new BigDecimal(123.11 + i * 0.09));
    exportVO.setAmount(new BigDecimal(6666.666 + i * 10));
    exportVO.setDate(new Date(132324343 + i * 100));
    exportVO.setDateTime(new java.util.Date());
    list.add(exportVO);
}
List<String> colList = new ArrayList<>();
//按照顺序仅导出add的列
colList.add("name");
colList.add("value");
//调用获取workbook对象;也可以直接调用exportSpecifyCol方法导出到浏览器W
orkbook workbook = ExcelExportUtil.getWorkbookSpecifyCol(list, ExportVO.class, colList);
  • 示例二:多sheet页签导出
List<ExportVO> list = new ArrayList<>();
List<Export2VO> list2 = new ArrayList<>();
for (int i = 0; i < 500; i++) {
   
    ExportVO exportVO = new ExportVO();
    exportVO.setName("name" + i);
    exportVO.setValue(new BigDecimal(123.11 + i * 0.09));
    exportVO.setAmount(new BigDecimal(6666.666 + i * 10));
    exportVO.setDate(new Date(132324343 + i * 100));
    exportVO.setDateTime(new java.util.Date());
    list.add(exportVO);
    Export2VO export2VO = new Export2VO();
    export2VO.setName("name" + i);
    export2VO.setValue("value" + i);
    export2VO.setAmount(new BigDecimal(6666.666 + i * 10));
    export2VO.setDate(new Date(132324343 + i * 100));
    export2VO.setDateTime(new java.util.Date());
    list2.add(export2VO);
}
Map<Class<?>, Collection<?>> map = new HashMap<>();
map.put(ExportVO.class, list);
map.put(Export2VO.class, list2);
//调用获取workbook对象;也可以直接调用exportByMultiSheet方法导出到浏览器
Workbook workbook = ExcelExportUtil.getWorkbookByMultiSheet(map);

地址:

github.com/alan-et/ala…

目录
相关文章
|
20天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
96 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
1天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
19 5
|
1天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
18 4
|
1天前
|
SQL Java API
|
7天前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
99 11
|
1天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
10 2
|
27天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
13天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
11天前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
28天前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
54 3