github地址: https://github.com/alan-et/alanpoi/tree/develop/alanpoi-analysis

项目中使用:

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

功能介绍

IMPORT

  1. ExcelHandle 核心处理器

  2. ExcelWorkbookManage excel所有工作表管理

  3. ExcelInitConfig 配置文件初始化

  4. AbstractFileParser 文件转换类

alanpoi import有何优势?

  1. 用户不需要额外引入poi等繁琐的jar
  2. 毫秒级解析大文件,支持一键解析多sheet页签,不需要自己按照一定的格式循环匹配解析所有数据
  3. 不管你的系统多么复杂,有多少个导入,alanpoi全部支持,而且准确返回你需要的对象,减轻开发者工作量
  4. 目前外界业务越来越复杂,对各个功能要求也越来越严格,当然导入也不例外,alanpoi支持错误一键回写到excel,对应到每一行
  5. alanpoi灵活可扩展,提供了ExcelConsumeInterface接口,可继承它,实现valid、error、end三个方法编写自己的业务
    A. valid: 方法参数返回excel所有数据,用户可进行自我校验
    B. error: 导入错误会回调
    C. end: 方法参数返回校验成功的数据,valid校验失败的数据不会返回,用户可以自己操作持久化或者其他业务

怎么使用alanpoi实现导入

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

一配置

在项目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>

一继承

consume类继承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);

一调用

用户调用ExcelExportUtil类的customImportData即可,参数excelId就是excel-conifg.xml中配置的id

Export

描叙

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

模式

注解模式导出

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;
}

使用

方式一. 直接导出到浏览器

ExcelExportUtil.export(Colletion<?>,Class,HttpServletRequest,HttpServletResponse,fileName);

方式二. 调用getWorkbook获取工作表,自行处理workbook

ExcelExportUtil.getWorkbook(Collection<?> singleSheetData, Class<?> c)

高级使用

示例一:导出指定列(动态导出列)

    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方法导出到浏览器Workbook 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);

代码已经开源,欢迎各位前来提出意见,谢谢!

最近发现有部分网站侵权,原创不易,麻烦转载注明原文链接;

JAVA导入/导出EXCEL文件,自定义校验,错误回写excel,使用简单快捷相关推荐

  1. Java导入导出CSV文件

    场景:导入导出CSV文件 1.CSVUtils类 package com.delta.gddx;import java.io.BufferedReader; import java.io.Buffer ...

  2. 用java导入导出zip文件

    zip导入 public SwaggerResultUtil<String> importDefinition(@RequestParam(value = "file" ...

  3. Excel文件解析和结果回写

     项目中使用Excel建立任务,然后上传到fastdfs,此处只摘出Excel解析的逻辑以及分析后失败结果回写的逻辑. /*** Bestpay.com.cn Inc.* Copyright (c) ...

  4. JAVA导入导出CRV文件

    起初,我自己连什么叫CSV文件都不知道,这个问题是来自一个网友的问题,他要我帮他做一个对csv文件数据的操作的题目.要求:如果原来数据是"江苏省南京市南京街--"换成"江 ...

  5. java 导入导出txt文件_Java读取和写入txt文件

    1 问题描述 对于java的读取和写入txt一直心存疑惑,随着知识的积累,又重新进行学习,对java的文件读写理解更加深刻,在这里将自己的小小经验总结分享给大家.下面是大家了解java流的一个基本框架 ...

  6. java jxl 写 excel文件_Java使用jxl包写Excel文件适合列宽实现

    注意,这个只是基本可以实现,基本针对中文电子报表. 1.实现思路 (1)一般的中文汉字占位长度是英文字母的2倍,"方块字"很统一. (2)对于要写入Excel中的数据统计每一列的最 ...

  7. java导入导出excel文件

    前言:该文章使用java集成poi来操作excel文件,此处只对poi相关api进行代码编写,对于poi的理论性知识,可在学习完这篇文章后,自行百度学习.建议大家跟着文章敲一遍代码. 创建一个mave ...

  8. java导入导出excel_Java导入导出Excel工具 easyexcel

    Java导入导出Excel工具  easyexcel 做Java开发的同学,尤其是做管理后台的同学绝大多数都会接触到报表系统,这时候就少不了Excel的导入和导出了.Java解析生成Excel比较有名 ...

  9. java 导入导出excel表格

    java 导入导出excel表格 业务上有需求上传excel表格并读取内容,本文记录一下该方法 表格导入 引入相应的工具包 <dependency><groupId>cn.af ...

最新文章

  1. 纽约时报:近1/3美国顶尖AI科学家来自中国,88%中国籍博士会留下建设美利坚...
  2. Android多媒体框架之MediaMetadataRetriever
  3. Android--EditText控件属性汇总
  4. 用java api 实现查询 Hive 数据
  5. 2021盐城中考有计算机考试吗,2021盐城中考总分满分是多少?各科目分值设置
  6. 厉害了!阿里安全图灵实验室在ICDAR2017 MLT竞赛刷新世界最好成绩
  7. pow()函数的应用
  8. IDEA导入Gradle项目后,重现构建项目并导入jar包后但是External Libraries目录中无任何引入的jar包
  9. cogs 2620. [HEOI2012]朋友圈
  10. VHDL 四选一数据选择器
  11. 深度学习面试基础--BN层
  12. uni-app初学步骤教程:
  13. 全栈学习之CSS基础学习
  14. 2018年8月win10教育版education最新激活密钥
  15. 互联网盈利模式研习笔记 1:流量变现
  16. 23种设计模式之单例模式、工厂模式、原型模式、建造者模式
  17. java毕业设计的健身俱乐部综合管理系统mybatis+源码+调试部署+系统+数据库+lw
  18. 管理者如何抓共性问题进行组织优化运作
  19. android 7.0关机动画,Android 修改系统关机动画的实现
  20. 22春天津大学《工程地质学》在线作业二

热门文章

  1. 帮转|腾讯云市场新版上线:大不同
  2. Win10系统bhound7.sys蓝屏故障修复
  3. Python学习笔记六——画小猪佩奇
  4. ssh 使用新法:公网(合法 ip)用户访问内网(私有 ip)服务器(http,ftp,sshd,cvs...),内网的朋友不妨一看。
  5. 2019年 十款Mac上必备的实用软件列表
  6. mysql常用函数整理
  7. 日语输入法时的部分实用快捷键
  8. 强迫症患者之黑苹果优化(启动画面、CPU重命名、显示真实主板、开启12代CPU全核心)
  9. 沈从文《边城》中的“碾坊”与“渡船”、“车路”与“马路”
  10. 【100%通过率】华为OD机试真题 Python 实现【核酸最快检测效率】【2022.11 Q4 新题】