JAVA导入/导出EXCEL文件,自定义校验,错误回写excel,使用简单快捷
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
ExcelHandle 核心处理器
ExcelWorkbookManage excel所有工作表管理
ExcelInitConfig 配置文件初始化
AbstractFileParser 文件转换类
alanpoi import有何优势?
- 用户不需要额外引入poi等繁琐的jar
- 毫秒级解析大文件,支持一键解析多sheet页签,不需要自己按照一定的格式循环匹配解析所有数据
- 不管你的系统多么复杂,有多少个导入,alanpoi全部支持,而且准确返回你需要的对象,减轻开发者工作量
- 目前外界业务越来越复杂,对各个功能要求也越来越严格,当然导入也不例外,alanpoi支持错误一键回写到excel,对应到每一行
- 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,使用简单快捷相关推荐
- Java导入导出CSV文件
场景:导入导出CSV文件 1.CSVUtils类 package com.delta.gddx;import java.io.BufferedReader; import java.io.Buffer ...
- 用java导入导出zip文件
zip导入 public SwaggerResultUtil<String> importDefinition(@RequestParam(value = "file" ...
- Excel文件解析和结果回写
项目中使用Excel建立任务,然后上传到fastdfs,此处只摘出Excel解析的逻辑以及分析后失败结果回写的逻辑. /*** Bestpay.com.cn Inc.* Copyright (c) ...
- JAVA导入导出CRV文件
起初,我自己连什么叫CSV文件都不知道,这个问题是来自一个网友的问题,他要我帮他做一个对csv文件数据的操作的题目.要求:如果原来数据是"江苏省南京市南京街--"换成"江 ...
- java 导入导出txt文件_Java读取和写入txt文件
1 问题描述 对于java的读取和写入txt一直心存疑惑,随着知识的积累,又重新进行学习,对java的文件读写理解更加深刻,在这里将自己的小小经验总结分享给大家.下面是大家了解java流的一个基本框架 ...
- java jxl 写 excel文件_Java使用jxl包写Excel文件适合列宽实现
注意,这个只是基本可以实现,基本针对中文电子报表. 1.实现思路 (1)一般的中文汉字占位长度是英文字母的2倍,"方块字"很统一. (2)对于要写入Excel中的数据统计每一列的最 ...
- java导入导出excel文件
前言:该文章使用java集成poi来操作excel文件,此处只对poi相关api进行代码编写,对于poi的理论性知识,可在学习完这篇文章后,自行百度学习.建议大家跟着文章敲一遍代码. 创建一个mave ...
- java导入导出excel_Java导入导出Excel工具 easyexcel
Java导入导出Excel工具 easyexcel 做Java开发的同学,尤其是做管理后台的同学绝大多数都会接触到报表系统,这时候就少不了Excel的导入和导出了.Java解析生成Excel比较有名 ...
- java 导入导出excel表格
java 导入导出excel表格 业务上有需求上传excel表格并读取内容,本文记录一下该方法 表格导入 引入相应的工具包 <dependency><groupId>cn.af ...
最新文章
- 纽约时报:近1/3美国顶尖AI科学家来自中国,88%中国籍博士会留下建设美利坚...
- Android多媒体框架之MediaMetadataRetriever
- Android--EditText控件属性汇总
- 用java api 实现查询 Hive 数据
- 2021盐城中考有计算机考试吗,2021盐城中考总分满分是多少?各科目分值设置
- 厉害了!阿里安全图灵实验室在ICDAR2017 MLT竞赛刷新世界最好成绩
- pow()函数的应用
- IDEA导入Gradle项目后,重现构建项目并导入jar包后但是External Libraries目录中无任何引入的jar包
- cogs 2620. [HEOI2012]朋友圈
- VHDL 四选一数据选择器
- 深度学习面试基础--BN层
- uni-app初学步骤教程:
- 全栈学习之CSS基础学习
- 2018年8月win10教育版education最新激活密钥
- 互联网盈利模式研习笔记 1:流量变现
- 23种设计模式之单例模式、工厂模式、原型模式、建造者模式
- java毕业设计的健身俱乐部综合管理系统mybatis+源码+调试部署+系统+数据库+lw
- 管理者如何抓共性问题进行组织优化运作
- android 7.0关机动画,Android 修改系统关机动画的实现
- 22春天津大学《工程地质学》在线作业二
热门文章
- 帮转|腾讯云市场新版上线:大不同
- Win10系统bhound7.sys蓝屏故障修复
- Python学习笔记六——画小猪佩奇
- ssh 使用新法:公网(合法 ip)用户访问内网(私有 ip)服务器(http,ftp,sshd,cvs...),内网的朋友不妨一看。
- 2019年 十款Mac上必备的实用软件列表
- mysql常用函数整理
- 日语输入法时的部分实用快捷键
- 强迫症患者之黑苹果优化(启动画面、CPU重命名、显示真实主板、开启12代CPU全核心)
- 沈从文《边城》中的“碾坊”与“渡船”、“车路”与“马路”
- 【100%通过率】华为OD机试真题 Python 实现【核酸最快检测效率】【2022.11 Q4 新题】