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

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

 

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包放在你的项目里面(链接:https://pan.baidu.com/s/1WPJ-BOSqixSkSqNhLHAsUQ  提取码:83zb ),也点击本文资源下载。

下载下来应该就是下面这个样子,excel文件夹,包含3个类,连同文件夹一起放在你的项目里,我这里是放在utils包下面的。

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

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

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

  •  读取excel为List<HashMap<String,Object>>格式的:
     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,简单点就是实体类,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%提成,团队实力强大,个人开发者价格好说,但是也能提供专业软件公司资质和发票。

猜你喜欢

转载自blog.csdn.net/lingyancangqiong/article/details/106663689