失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java poi 实现excel导入导出工具类

Java poi 实现excel导入导出工具类

时间:2019-06-10 18:20:16

相关推荐

Java poi 实现excel导入导出工具类

最近项目上又要大量的涉及excel导入导出,网上各种导入导出的方式层出不穷,我是比较青睐官方的poi,但是要自己去操作工作簿对象自己一行一行的读取,会有很多的重复代码,重复劳动,也极为不美观,基于合成/聚合复用程序设计原则,降低耦合,所以提出来基于poi写了这套工具类。以前也写过类似的工具类,由于项目进度问题,没写博客记录,导致这次用的时候找不到了(此处捂脸一分钟),于是痛定思痛,又封装了这一套,写完赶紧写个博客记录下,方便自己以后有需要时查阅,如得各位大佬享用,荣幸之至,所有方法已在项目中验证,可直接使用,为了照顾有些宝宝所以下面写的很直白。

根据广大网友的使用实践,按bean类型导出时,不能序列化,否则会造成:Cannot write data, document seems to have been closed already 异常

1. 导入poi的maven依赖,版本4.0.1

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency>

2.下载excel包放在你的项目里面(链接:excel.7z - 蓝奏云密码:7khr),也可点击我的csdn个人资源下载。

下载下来应该就是下面这个样子,excel文件夹,包含3个类,连同文件夹一起放在你的项目里,我这里是放在utils包下面的,下载下来会报错,需要自己调一下包引用路径

ExcelUtils类:调用接口类,使用时也是使用这个类下的静态方法即可。ExcelDataChecker类:poi操作数据的详细逻辑,很多方法ExcelUtils类只是做了一个转发,有人就会说,我使用的时候直接调用这个类不好吗?我明确的告诉你,不好!!!!这是基于程序设计的开闭原则设计的。如果使用,一定是调用ExcelUtils类下的静态方法。EmptyChecker类:对象,字符判空的工具类,ExcelDataChecker类中有使用到。

3.如何使用:注意看ExcelUtils类方法上的注释,读取的方法是不区分xls和xlsx的,读取为实体类格式时,注意excel表头和字段名要一致才能映射。

这里只是写几个示例,有些宝宝就算你给他封装好了,他还是不知道怎么用,还说你的方法没用。

读取excel为List格式的:

String fileName = "D:\\work-files\\3.xls";// 获取Excel文件File excelFile = new File(fileName);//读取单页excel,获取List<HashMap<String, Object>>格式List<HashMap<String, Object>> list = ExcelUtils.parseSingleExcelToMap(excelFile);//读取多页excel,获取List<HashMap<String, Object>>格式List<List<HashMap<String, Object>>> lists =ExcelUtils.parseComplexExcel(excelFile);

读取excel为List<bean>格式的,有些宝宝又要问啥叫bean,简单点就是java类,你的实体类,UserEntity可以是任何实体类,只要字段和你的excel列表头一致:

//获取baen格式的,之一此方法严格要求实体类字段和excel列的顺序一致List<? extends UserEntity> userEntities = ExcelUtils.readExcelToBean(excelFile, new UserEntity().getClass());//获取baen格式的,不要求顺序,只是表头和字段名一致即可List<? extends UserEntity> userEntitie = ExcelUtils.excelToBean(excelFile, new UserEntity().getClass());

下载也只需一行代码,示例map类型的,bean类型的自己去看。

@GetMapping("/excel")public void excelTest(HttpServletResponse httpResponse){List<HashMap<String, Object>> li = new ArrayList<>();HashMap<String, Object> hashMap = new HashMap();hashMap.put("姓名", "张三");hashMap.put("年龄", "16");hashMap.put("性别", "女");hashMap.put("出生年月", new Date());hashMap.put("身价", 12.00F);li.add(hashMap);HashMap<String, Object> hashMap1 = new HashMap();hashMap1.put("姓名", "张三");hashMap1.put("年龄", "16");hashMap1.put("性别", "女");hashMap1.put("出生年月", new Date());hashMap1.put("身价", 123.77);li.add(hashMap1);//只需传入HttpServletResponse对象,文件名,数据即可完成下载ExcelUtils.exportExcelToResponse(httpResponse,"xx.xlsx",li);}

ExcelUtils类应该能满足excel操作所有使用了,也难免有些特殊场景不能满足使用的,本着助人为乐,可留言,有时间都会尽量满足各位大佬。

我这里读取文件类型都是 java.io.File类型的,有些上传时文件类型用的是使用org.springframework.web.multipart.MultipartFile,可以改下我方法的文件类型,两种文件类型最后无非都是拿到FileInputStream对象,改不了可以用笨办法两个类型互转,实在不行给我留言。

平时接点软件外包挣点外快,介绍5%-20%提成,团队实力强大,个人开发者价格好说,但是也能提供专业软件公司资质和发票。

如果觉得《Java poi 实现excel导入导出工具类》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。