最近项目上又要大量的涉及excel导入导出,网上各种导入导出的方式层出不穷,我是比较青睐官方的poi,但是要自己去操作工作簿对象自己一行一行的读取,会有很多的重复代码,重复劳动,也极为不美观,基于合成/聚合复用程序设计原则,降低耦合,所以提出来基于poi写了这套工具类。以前也写过类似的工具类,由于项目进度问题,没写博客记录,导致这次用的时候找不到了(此处捂脸一分钟),于是痛定思痛,又封装了这一套,写完赶紧写个博客记录下,方便自己以后有需要时查阅,如得各位大佬享用,荣幸之至,所有方法已在项目中验证,可直接使用,为了照顾有些宝宝所以下面写的很直白。
1. 导入poi的maven依赖,版本4.0.1
org.apache.poi
poi
4.0.1
org.apache.poi
poi-ooxml
4.0.1
2.下载excel包放在你的项目里面(链接:https://pan.baidu.com/s/1WPJ-BOSqixSkSqNhLHAsUQ 提取码:83zb ),也点击本文资源下载。
下载下来应该就是下面这个样子,excel文件夹,包含3个类,连同文件夹一起放在你的项目里,我这里是放在utils包下面的。
3.如何使用:注意看ExcelUtils类方法上的注释,读取的方法是不区分xls和xlsx的,读取为实体类格式时,注意excel表头和字段名要一致才能映射。
这里只是写几个示例,有些宝宝就算你给他封装好了,他还是不知道怎么用,还说你的方法没用。
String fileName = "D:\\work-files\\3.xls";
// 获取Excel文件
File excelFile = new File(fileName);
//读取单页excel,获取List>格式
List> list = ExcelUtils.parseSingleExcelToMap(excelFile);
//读取多页excel,获取List>格式
List>> lists =ExcelUtils.parseComplexExcel(excelFile);
//获取baen格式的,之一此方法严格要求实体类字段和excel列的顺序一致
List extends UserEntity> userEntities = ExcelUtils.readExcelToBean(excelFile, new UserEntity().getClass());
//获取baen格式的,不要求顺序,只是表头和字段名一致即可
List extends UserEntity> userEntitie = ExcelUtils.excelToBean(excelFile, new UserEntity().getClass());
@GetMapping("/excel")
public void excelTest(HttpServletResponse httpResponse){
List> li = new ArrayList<>();
HashMap hashMap = new HashMap();
hashMap.put("姓名", "张三");
hashMap.put("年龄", "16");
hashMap.put("性别", "女");
hashMap.put("出生年月", new Date());
hashMap.put("身价", 12.00F);
li.add(hashMap);
HashMap 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%提成,团队实力强大,个人开发者价格好说,但是也能提供专业软件公司资质和发票。