@excel 注解_SpringBoot实现Excel读取

SpringBoot实现Excel读取

这是本人写的一个SpringBoot对Excel读取的方法,实测能用,待提升的地方有很多,有不足之处请多多指点。
Excel2003版(后缀为.xls)最大行数是65536行,最大列数是256列。
Excel2007以上的版本(后缀为.xlsx)最大行数是1048576行,最大列数是16384列。提供2种方法读取:1.根据指定的开始和结束行数读取返回结果,结果格式为List<Map<String, Object>>2.根据指定的开始和结束行数读取返回结果,结果格式为List<POJO(传入的实体类)>
请根据实际内存堆可用大小进行读取,太多可进行分段读取(类似分页的原理)


读取Excel所需要的几个类

3056caae4ae8e1885c2ad9ee0e7c855e.png
1.在pom.xml加上依赖
</dependencies>
        <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>
</dependencies>
2.ExcelPOJO实体类
package com.cly.utils.Excel;

/**
 * @author : CLy
 * @ClassName : ExcelPOJO
 * @date : 2020/7/9 17:13
 * 实体类所有成员变量都需要有GET,SET方法
 * 所有成员变量都要加上注解@excelRescoure(value = "?"),?为Excel真实列名,必须一一对应
 * @excelRescoure(value = "?"),?可为空,需要用到才赋值
 * 成员变量目前只允许String,Double,Interge,Float
 **/

public class ExcelPOJO  {
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPasswork() {
        return passwork;
    }
    public void setPasswork(String passwork) {
        this.passwork = passwork;
    }
    public String getLook() {
        return look;
    }
    public void setLook(String look) {
        this.look = look;
    }
    
   @excelRescoure(value = "XM")
   private  String name;
   @excelRescoure(value = "SFZH")
   private  String passwork;
   @excelRescoure()
   private  String look;
 
   @Override
   public String toString(){
        return "name:"+this.getName()+",passwork:"+this.getPasswork()+",look:"+this.getLook();
    }
   public ExcelPOJO() {}
}
3.@interface自定义注解(用于实体类读取)
package com.cly.utils.Excel;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author : CLy
 * @ClassName : myRescoure
 * @date : 2020/7/10 9:31
 **/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface excelRescoure {
    String value() default "";//默认为空
}
4.excelRead类(读取Excel数据类)有很多冗余的代码,可抽离出来
package com.cly.utils.Excel;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sun.org.apache.bcel.internal.generic.NEW;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.xml.transform.Source;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.*;
import java.text.DecimalFormat;
import java.util.*;

/**
 * @author : CLy
 * @ClassName : excelRead
 * @date : 2020/7/9 11:08
 **/
public class excelRead {
    //日志输出
    private static Logger logger = LoggerFactory.getLogger(excelRead.class);
    //定义excel类型
    private static f
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解答这个问题。 首先,你需要在你的Spring Boot项目中添加EasyExcel的依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.4</version> </dependency> ``` 然后,你需要编写一个类来表示你的Excel数据模型,可以像这样: ```java @Data public class ExcelData { private String name; private Integer age; // 其他字段... } ``` 接下来,你需要编写一个Excel导入的Controller,可以像这样: ```java @RestController @RequestMapping("/excel") public class ExcelController { @PostMapping("/import") public String importExcel(@RequestParam("file") MultipartFile file) throws Exception { EasyExcel.read(file.getInputStream(), ExcelData.class, new ExcelDataListener()).sheet().doRead(); return "导入成功"; } private static class ExcelDataListener extends AnalysisEventListener<ExcelData> { private List<ExcelData> list = new ArrayList<>(); @Override public void invoke(ExcelData data, AnalysisContext context) { list.add(data); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 批量保存数据 } } } ``` 这个Controller中,我们使用`@PostMapping`注解来处理POST请求,使用`@RequestParam`注解来接收文件上传参数。然后,我们通过EasyExcel的`EasyExcel.read(...)`方法来读取Excel文件,使用`ExcelData.class`表示我们要读取Excel数据模型类,使用`new ExcelDataListener()`来指定数据解析的监听器。在`ExcelDataListener`中,我们使用`List`来保存解析出来的数据,然后在`doAfterAllAnalysed`方法中批量保存数据。 最后,你可以向`/excel/import`发送POST请求,上传Excel文件,即可批量导入数据。 希望我的回答能够帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值