几行代码就能实现复杂的 Excel 导入导出,这个工具类真心强大!
点击关注公众号,实用技术文章及时了解
功能介绍
IMPORT
ExcelHandle
核心处理器ExcelWorkbookManage
excel所有工作表管理ExcelInitConfig
配置文件初始化AbstractFileParser
文件转换类
alanpoi import有何优势?
用户不需要额外引入poi等繁琐的jar
毫秒级解析大文件,支持一键解析多sheet页签,不需要自己按照一定的格式循环匹配解析所有数据
不管你的系统多么复杂,有多少个导入,
alanpoi
全部支持,而且准确返回你需要的对象,减轻开发者工作量目前外界业务越来越复杂,对各个功能要求也越来越严格,当然导入也不例外,alanpoi支持错误一键回写到excel,对应到每一行
alanpoi
灵活可扩展,提供了ExcelConsumeInterface
接口,可继承它,实现valid、error、end
三个方法编写自己的业务valid: 方法参数返回excel所有数据,用户可进行自我校验
error: 导入错误会回调
end: 方法参数返回校验成功的数据,valid校验失败的数据不会返回,用户可以自己操作持久化或者其他业务
怎么使用alanpoi实现导入
项目中使用:
<dependency><groupId>com.alanpoi</groupId><artifactId>alanpoi-analysis</artifactId><version>1.3.0</version>
</dependency>
简单一句话:一配置一继承一调用
一配置
在项目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
描叙
能够用一行代码实现绝不用第二行,如果一行不行,那就再加一行!推荐面试题:Java面试题库
模式
注解模式导出:
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);
代码已经开源,地址:
https://github.com/alan-et/alanpoi/tree/develop/alanpoi-analysis
来源:blog.csdn.net/weixin_43225813/
article/details/108995011
推荐
Java面试题宝典
技术内卷群,一起来学习!!
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!
几行代码就能实现复杂的 Excel 导入导出,这个工具类真心强大!相关推荐
- python读取excel文件代码封装_12行代码教会你用python读excel文件提取数据生成条形码...
12 行代码教会你用 python 读 excel 文件,提取数据,生成 条形码 一.需求分析条形码应用广泛,尤其是人事.财务和库 管等等岗位,常需根据 excel 文件成批生成条码,如果是经 常性天 ...
- [java]轻量级隔离化的excel导入导出的导入导出,解放导入导出冗余代码(有github源码)
如何使用 只需要添加相应的注解 @Excel(name = "学生统计数据表",sheetName = "Sheet1" ) @Data public clas ...
- Java操作百万数据量Excel导入导出工具类(程序代码教程)
Java操作百万数据量Excel导入导出工具类(程序代码教程): # 功能实现1.自定义导入数据格式,支持配置时间.小数点类型(支持单/多sheet)(2种方式:本地文件路径导入(只支持xls.xls ...
- 灰色模型代码GM(1,1),从excel导入数据,亦可导出数据到excel中。
灰色模型代码GM(1,1),从excel导入数据,亦可导出数据到excel中. 总结1:直接输出结果 %clc W= MicrosoftExcel;(从EXCEL导入数据后,matlab自动储存的数组 ...
- Python3,区区10行代码,批量把图片插入Excel指定单元格中,省下时间去烫头发。
这里写目录标题 1.引言 2.代码实战 2.1 代码示例 2.2 遇到问题及处理方案 2.2.1 遇到问题 2.2.2 解决方案 3.总结 1.引言 小屌丝:鱼哥, 想请教你个问题. 小鱼:啥问题呢? ...
- 【springboot+easypoi】一行代码搞定excel导入导出
原文:https://www.jianshu.com/p/5d67fb720ece 开发中经常会遇到excel的处理,导入导出解析等等,java中比较流行的用poi,但是每次都要写大段工具类来搞定这事 ...
- Adobe源码泄漏?3行代码搞定,Flash动画无缝导入Android/iOS/cocos2dx(二)
[注] iOS代码已重构,效率提升90%,200层动画不卡.[2016.10.27] 上一篇 点此阅读 简要介绍了FlashToAnimation的功能,也就是将flash动画无缝导入到Android ...
- python打印文档添加条码_12行代码教会你用python读excel文件,提取数据,生成条形码...
一.需求分析 条形码应用广泛,尤其是人事.财务和库管等等岗位,常需根据excel文件成批生成条码,如果是经常性天天做,用excel的自己控件还是很枯燥烦人的. 其实用pyrhon可以更加轻松的完成这一 ...
- 80行代码自己动手写一个表格拆分与合并小工具(文末附工具下载)
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 瑶池阿母绮窗开,黄竹歌声动地哀. ...
最新文章
- 关于线程执行顺序的问题
- Hardcoded string , should use @string resource警告 Tag start is not closed
- BugKuCTF WEB 变量1
- idea配置tomcat里你不知道的小秘密
- HDU题目分类啊!!!
- hbasehlog_HBase原理--RegionServer核心组件之HLog
- 堆之大,ZGC亦可速清也!
- dj鲜生-16-这是危险的模块-isdangerous
- FireEye 红队失窃工具大揭秘之:分析复现 Zoho 任意文件上传漏洞(CVE-2020-8394)
- 商业保理业务信息化平台建设的要点分享
- 如何下载四川省卫星地图高清版大图
- 什么是视频监控平台的平台对接
- PSINS源码阅读—STIM300/GNSS组合导航
- 第三十二章 三更雪压飞狐城(三之全)
- 【机器学习】决策树(Decision Tree)
- Soft-NMS – Improving Object Detection With One Line of Code
- MOG插件(葡萄牙语,略作翻译)
- MAT无法打开较大的hprof的解决办法
- 随机生成6位数字(包括字母和数字)
- 起价8万4!最强苹果电脑套装发布,iOS黑化,iPad独立 | 一文看尽WWDC大会