点击关注公众号,实用技术文章及时了解

功能介绍

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 导入导出,这个工具类真心强大!相关推荐

  1. python读取excel文件代码封装_12行代码教会你用python读excel文件提取数据生成条形码...

    12 行代码教会你用 python 读 excel 文件,提取数据,生成 条形码 一.需求分析条形码应用广泛,尤其是人事.财务和库 管等等岗位,常需根据 excel 文件成批生成条码,如果是经 常性天 ...

  2. [java]轻量级隔离化的excel导入导出的导入导出,解放导入导出冗余代码(有github源码)

    如何使用 只需要添加相应的注解 @Excel(name = "学生统计数据表",sheetName = "Sheet1" ) @Data public clas ...

  3. Java操作百万数据量Excel导入导出工具类(程序代码教程)

    Java操作百万数据量Excel导入导出工具类(程序代码教程): # 功能实现1.自定义导入数据格式,支持配置时间.小数点类型(支持单/多sheet)(2种方式:本地文件路径导入(只支持xls.xls ...

  4. 灰色模型代码GM(1,1),从excel导入数据,亦可导出数据到excel中。

    灰色模型代码GM(1,1),从excel导入数据,亦可导出数据到excel中. 总结1:直接输出结果 %clc W= MicrosoftExcel;(从EXCEL导入数据后,matlab自动储存的数组 ...

  5. Python3,区区10行代码,批量把图片插入Excel指定单元格中,省下时间去烫头发。

    这里写目录标题 1.引言 2.代码实战 2.1 代码示例 2.2 遇到问题及处理方案 2.2.1 遇到问题 2.2.2 解决方案 3.总结 1.引言 小屌丝:鱼哥, 想请教你个问题. 小鱼:啥问题呢? ...

  6. 【springboot+easypoi】一行代码搞定excel导入导出

    原文:https://www.jianshu.com/p/5d67fb720ece 开发中经常会遇到excel的处理,导入导出解析等等,java中比较流行的用poi,但是每次都要写大段工具类来搞定这事 ...

  7. Adobe源码泄漏?3行代码搞定,Flash动画无缝导入Android/iOS/cocos2dx(二)

    [注] iOS代码已重构,效率提升90%,200层动画不卡.[2016.10.27] 上一篇 点此阅读 简要介绍了FlashToAnimation的功能,也就是将flash动画无缝导入到Android ...

  8. python打印文档添加条码_12行代码教会你用python读excel文件,提取数据,生成条形码...

    一.需求分析 条形码应用广泛,尤其是人事.财务和库管等等岗位,常需根据excel文件成批生成条码,如果是经常性天天做,用excel的自己控件还是很枯燥烦人的. 其实用pyrhon可以更加轻松的完成这一 ...

  9. 80行代码自己动手写一个表格拆分与合并小工具(文末附工具下载)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 瑶池阿母绮窗开,黄竹歌声动地哀. ...

最新文章

  1. 关于线程执行顺序的问题
  2. Hardcoded string , should use @string resource警告 Tag start is not closed
  3. BugKuCTF WEB 变量1
  4. idea配置tomcat里你不知道的小秘密
  5. HDU题目分类啊!!!
  6. hbasehlog_HBase原理--RegionServer核心组件之HLog
  7. 堆之大,ZGC亦可速清也!
  8. dj鲜生-16-这是危险的模块-isdangerous
  9. FireEye 红队失窃工具大揭秘之:分析复现 Zoho 任意文件上传漏洞(CVE-2020-8394)
  10. 商业保理业务信息化平台建设的要点分享
  11. 如何下载四川省卫星地图高清版大图
  12. 什么是视频监控平台的平台对接
  13. PSINS源码阅读—STIM300/GNSS组合导航
  14. 第三十二章 三更雪压飞狐城(三之全)
  15. 【机器学习】决策树(Decision Tree)
  16. Soft-NMS – Improving Object Detection With One Line of Code
  17. MOG插件(葡萄牙语,略作翻译)
  18. MAT无法打开较大的hprof的解决办法
  19. 随机生成6位数字(包括字母和数字)
  20. 起价8万4!最强苹果电脑套装发布,iOS黑化,iPad独立 | 一文看尽WWDC大会

热门文章

  1. Android开发MVP模式(解决了View和Model的耦合)
  2. Unity修改批量修改名字工具
  3. soul源码阅读 soul数据同步之nacos
  4. 智能驾驶域控制器SoC选型
  5. UWB定位,新一代的精确定位技术
  6. Xcode安装特定版本系统的模拟器(不支持断点下载所以总是下载失败)
  7. OTG 线结构原理及注意事项
  8. 8255 并行接口实验
  9. Pytorch的自定义拓展:torch.nn.Module和torch.autograd.Function
  10. SRCK5 SR3LC SR3YZ SREJP SR3L8