当前位置:网站首页>几行代码就能实现复杂的 Excel 导入导出,这个工具类真心强大!
几行代码就能实现复杂的 Excel 导入导出,这个工具类真心强大!
2022-06-28 18:29:00 【Java技术栈】
来源:blog.csdn.net/weixin_43225813/article/details/108995011
功能介绍
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
描叙
能够用一行代码实现绝不用第二行,如果一行不行,那就再加一行!
模式
注解模式导出:
- ExcelSheet注解:用于导入类上,可制定sheet名,列头的颜色、字体、高度、宽度
- ExcelColum注解:用于导入类的属性上,可指定列头的名称,单元格的样式
- DateFormat注解:用于导入类的属性上, 可以按照指定格式输出到excel,默认"
yyyy/MM/dd" - NumFormat注解:用于导入类的属性上,可以按照指定格式输出到excel,默认"
00.00"
样例:
@ExcelSheet(name = "测试", backColor = AlanColors.GREEN, font = "宋体", fontSize = 25)@Datapublic 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);近期热文推荐:
1.1,000+ 道 Java面试题及答案整理(2022最新版)
4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!
觉得不错,别忘了随手点赞+转发哦!
边栏推荐
- 堆的概念和代码实现
- WiFi安全漏洞KRACK深度解读
- Small program graduation design based on wechat driving school examination small program graduation design opening report function reference
- Lumiprobe非荧光叠丨氮化物研究丨3-叠丨氮丙醇
- Small program graduation project based on wechat chess and card room small program graduation project opening report function reference
- GCC getting started manual
- 浦发银行软件测试面试真题(小编面试亲测)
- 杂记:数据库go,begin,end,for,after,instead of
- 数据库MySQL语句期末复习 CTGU
- OneFlow源码解析:算子签名的自动推断
猜你喜欢

Small program graduation project based on wechat agricultural and sideline products agricultural products mall small program graduation project opening report function reference

Unity about oculus quest2 developing 002-ui interaction based on XR interaction Toolkit

NFT流动性协议的安全困局—NFT借贷协议XCarnival被黑事件分析

Small program graduation project based on wechat subscription water supply mall small program graduation project opening report function reference

如何从RHEL 8升级到RHEL 9

Go, begin, end, for, after, instead of

如何设计业务高性能高可用计算架构 - 作业

CORBA 架构体系指南(通用对象请求代理体系架构)

解析机器人主持教学的实践发展

324. 摆动排序 II
随机推荐
19.2 容器分类、array、vector容器精解
Lumiprobe ProteOrange 蛋白质凝胶染料说明书
基于固态激光雷达辅助的十六线机械雷达和单目相机的外参标定方法
微软独家付费功能,也被完美解锁了
使用.NetCore自带的后台作业,出入队简单模拟生产者消费者处理请求响应的数据
图形系统——2.view绘制
推荐两款超高质量的壁纸软件
JQ plug-in analysis
Small program graduation project based on wechat campus lost and found graduation project opening report function reference
启牛学堂的vip证券账户是真的安全正规吗?怎么说
面部識別試驗涉及隱私安全問題?國外一公司被緊急叫停
工业数字化与新一代数字化系统设计平台----讲座
CORBA 架构体系指南(通用对象请求代理体系架构)
正版ST-link/V2 J-LINK JTAG/SWD引脚定义和注意事项
Small program graduation project based on wechat recruitment small program graduation project opening report function reference
手动备份和还原DHCP服务器
PCB线路板布局和布线都有哪些设计要求?
Detailed explanation of select in golang (forward)
从理论到实践增强STEAM和工程教育
GCC getting started manual