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…

目录
相关文章
|
24天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
48 1
|
22天前
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
64 10
|
2天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
31 10
|
5天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
28天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
48 4
|
1月前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
81 4
|
9天前
|
安全 Java API
Java中的Lambda表达式:简化代码的现代魔法
在Java 8的发布中,Lambda表达式的引入无疑是一场编程范式的革命。它不仅让代码变得更加简洁,还使得函数式编程在Java中成为可能。本文将深入探讨Lambda表达式如何改变我们编写和维护Java代码的方式,以及它是如何提升我们编码效率的。
|
1月前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
35 0
|
8天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
2月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
111 4