SpringBoot 는 Easy Excel 을 통합 하여 Excel 가 져 오 는 방법 을 실현 합 니 다.

처음으로 공식 적 으로 글 을 써 서 공유 하고 글 에 문제 가 있 으 면 글 끝의 단체 내 에서 피드백 하 는 것 을 환영 합 니 다.
배경
왜 Easyexcel 로 엑셀 을 올 려 요?
평소에 프로젝트 에서 Easy Excel 을 사용 하여 로 컬 에서 Excel 의 데 이 터 를 읽 고 처리 해 야 할 데 이 터 를 설정 합 니 다(예 를 들 어 Excel 이 있 는 폴 더,Excel 의 파일 이름,Sheet 열 이름,데이터 처리 에 필요 한 일부 매개 변수).매번 읽 는 로 컬 파일 이 라 고 생각 합 니 다.어느 날 전단 을 통 해 엑셀 을 올 려 줘 야 한다 면 내 가 처리 하 라 고 하면 어 떡 하지?나 는 어떻게 해야만 코드 를 최대한 적 게 수정 하 는 전제 에서 이 기능 을 실현 할 수 있 습 니까?나중에 많은 자 료 를 찾 아 보 니 엑셀 은 InPut Stream 흐름 으로 엑셀 을 읽 을 수 있다 는 것 을 알 게 되 었 고 나 는 갑자기 무엇 을 알 게 되 었 다.
알 리 바 바 참새 팀 은 Easy Excel 에 대해 이렇게 소 개 했 습 니 다.
자바 해석,엑셀 생 성 으로 유명한 프레임 워 크 는 Apache poi,jxl 입 니 다.그러나 그들 모두 심각 한 문 제 는 메모리 소모 이다.
poi 는 SAX 모드 의 API 가 있어 서 메모리 가 넘 치 는 문 제 를 어느 정도 해결 할 수 있 지만 POI 는 일부 결함 이 있 습 니 다.예 를 들 어 07 판 Excel 압축 해제 등 입 니 다.
압축 을 줄 이 고 압축 을 푼 후에 저장 소 는 모두 메모리 에서 이 루어 졌 으 며 메모리 소 모 는 여전히 매우 크다.easyexcel 은 07 판 Excel 에 대한 포 이 를 다시 썼 습 니 다.
이 3M 의 엑셀 은 POI sax 로 100 M 정도 의 메모리 가 필요 하 며,아무리 큰 엑셀 이라도 메모리 가 넘 치지 않 습 니 다.03 판 의존 도 는 나타 나 지 않 습 니 다.
POI 의 sax 모드.상부 에 모델 전환 패 키 지 를 만들어 사용자 들 이 더욱 간단 하고 편리 하 게 만 들 었 다.
물론 빠 른 모드 도 있 지만 메모리 사용량 은 100 M 이상이다.
2.통합 Easy Excel?
사다
1.pom.xml 에 Easy Excel 의존 도 를 추가 합 니 다.

 <dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>easyexcel</artifactId>
   <version>2.1.3</version>
  </dependency>
2.EasyExcel 맵 실체 클래스 만 들 기

import com.alibaba.excel.annotation.ExcelProperty;

public class ExcelEntity {
 // ExcelProperty       Excel    
 @ExcelProperty("ID")
 private int ID;

 @ExcelProperty("NAME")
 private String name;

 @ExcelProperty("AGE")
 private int age;

 public ExcelEntity() {
 }

 public ExcelEntity(int ID, String name, int age) {
  this.ID = ID;
  this.name = name;
  this.age = age;
 }

 public int getID() {
  return ID;
 }

 public void setID(int ID) {
  this.ID = ID;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }
}
3.사용자 정의 Easyexcel 감청 류 만 들 기
  • 이 감청 류 에서 모든 ExcelEntity 대상 이 한 줄 의 데 이 터 를 대표 한다
  • 이 감청 류 에서 읽 은 줄 마다 데 이 터 를 단독 조작 할 수 있 습 니 다
  • 여기 서 읽 은 데 이 터 는 Excel 의 모든 데이터 순서에 따라 읽 습 니 다
  • 
    import com.alibaba.excel.context.AnalysisContext;
    import com.alibaba.excel.event.AnalysisEventListener;
    import java.util.ArrayList;
    import java.util.List;
    
    public class UploadExcelListener extends AnalysisEventListener<ExcelEntity> {
    
     private static final Logger logger = LoggerFactory.getLogger(LoggerItemController.class);
     public static final List<ExcelEntity> list = new ArrayList<>();
    
     @Override
     public void invoke(ExcelEntity excelEntity, AnalysisContext context) {
      logger.info(String.valueOf(excelEntity.getID()));
      logger.info(excelEntity.getName());
      logger.info(String.valueOf(excelEntity.getAge()));
      list.add(excelEntity);
     }
    4、controller 생 성
    
    import com.alibaba.excel.EasyExcel;
    import com.alibaba.excel.ExcelReader;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    @RestController
    @CrossOrigin
    @RequestMapping("/loggerItem")
    public class LoggerItemController {
    
    
     // MultipartFile                   
     @PostMapping("/upload")
     public List<ExcelEntity> upload(@RequestParam(value = "multipartFile") MultipartFile multipartFile){
      if (multipartFile == null){
       return null;
      }
    
      InputStream in = null;
      try {
       //  multipartFile  InputStream 
       in = multipartFile.getInputStream();
    
       /*
        * EasyExcel       read  ,       
        *     EasyExcel   InputStream     Excel Read  
        *       ExcelReaderBuilder      
        * ExcelReaderBuilder    doReadAll  ,      Sheet
        */
       EasyExcel.read(in,ExcelEntity.class,new UploadExcelListener())
         .sheet("Sheet1")
         .doRead();
    
       //   EasyExcel read            ,       doReadAll  ,         
       in = multipartFile.getInputStream();
       /*
        * ExcelReaderBuilder  Sheet  ,       Sheet     
        *               doReadAll  ,          
        */
    
       EasyExcel.read(in,ExcelEntity.class,new UploadExcelListener()).doReadAll();
      } catch (IOException e) {
       e.printStackTrace();
      }
      return UploadExcelListener.list;
     }
    }
    5.application.yml 설정
    
    server:
     #      
     port: 8080
    spring:
     servlet:
     multipart:
      #           
      file-size-threshold: 100M
      #        
      max-request-size: 300M
    6.테스트
    우 리 는 먼저 간단 한 엑셀 을 만들어 서 테스트 를 한다.
    在这里插入图片描述
    그리고 Postman 시 뮬 레이 션 을 통 해 요청 을 보 냅 니 다.
  • Post 요청 을 선택 하고 요청 주 소 를 입력 하 십시오
  • 아래 에서 바디 선택
  • Key 상자 에 controller 에서 요청 한 방법의 인 자 를 입력 하고,뒤의 드 롭 다운 상자 에서 File
  • 을 선택 하 십시오.
  • VALUE 상자 에 Select File 이 있 습 니 다.클릭 한 후에 자신 이 방금 만 든 테스트 Excel
  • 을 선택 하 십시오.
  • 마지막 으로 클릭 하여 보 내기 요청
  • 在这里插入图片描述
    반환 값 은 다음 과 같 습 니 다:
    같은 List 에 두 번 읽 고 되 돌 아 왔 기 때문에 되 돌아 오 는 값 에는 8 개의 대상 이 있 습 니 다.
    
    [
     {
      "name": "  ",
      "age": 25,
      "id": 1
     },
     {
      "name": "  ",
      "age": 22,
      "id": 2
     },
     {
      "name": "  ",
      "age": 22,
      "id": 3
     },
     {
      "name": "  ",
      "age": 23,
      "id": 4
     },
     {
      "name": "  ",
      "age": 25,
      "id": 1
     },
     {
      "name": "  ",
      "age": 22,
      "id": 2
     },
     {
      "name": "  ",
      "age": 22,
      "id": 3
     },
     {
      "name": "  ",
      "age": 23,
      "id": 4
     }
    ]
    3.Easy Excel 의 Read 방법 을 모 았 습 니 다.
    
    /**
      * Build excel the read
      *
      * @return Excel reader builder.
      */
     public static ExcelReaderBuilder read() {
      return new ExcelReaderBuilder();
     }
    
     /**
      * Build excel the read
      *
      * @param file
      *   File to read.
      * @return Excel reader builder.
      */
     public static ExcelReaderBuilder read(File file) {
      return read(file, null, null);
     }
    
     /**
      * Build excel the read
      *
      * @param file
      *   File to read.
      * @param readListener
      *   Read listener.
      * @return Excel reader builder.
      */
     public static ExcelReaderBuilder read(File file, ReadListener readListener) {
      return read(file, null, readListener);
     }
    
     /**
      * Build excel the read
      *
      * @param file
      *   File to read.
      * @param head
      *   Annotate the class for configuration information.
      * @param readListener
      *   Read listener.
      * @return Excel reader builder.
      */
     public static ExcelReaderBuilder read(File file, Class head, ReadListener readListener) {
      ExcelReaderBuilder excelReaderBuilder = new ExcelReaderBuilder();
      excelReaderBuilder.file(file);
      if (head != null) {
       excelReaderBuilder.head(head);
      }
      if (readListener != null) {
       excelReaderBuilder.registerReadListener(readListener);
      }
      return excelReaderBuilder;
     }
    
     /**
      * Build excel the read
      *
      * @param pathName
      *   File path to read.
      * @return Excel reader builder.
      */
     public static ExcelReaderBuilder read(String pathName) {
      return read(pathName, null, null);
     }
    
     /**
      * Build excel the read
      *
      * @param pathName
      *   File path to read.
      * @param readListener
      *   Read listener.
      * @return Excel reader builder.
      */
     public static ExcelReaderBuilder read(String pathName, ReadListener readListener) {
      return read(pathName, null, readListener);
     }
    
     /**
      * Build excel the read
      *
      * @param pathName
      *   File path to read.
      * @param head
      *   Annotate the class for configuration information.
      * @param readListener
      *   Read listener.
      * @return Excel reader builder.
      */
     public static ExcelReaderBuilder read(String pathName, Class head, ReadListener readListener) {
      ExcelReaderBuilder excelReaderBuilder = new ExcelReaderBuilder();
      excelReaderBuilder.file(pathName);
      if (head != null) {
       excelReaderBuilder.head(head);
      }
      if (readListener != null) {
       excelReaderBuilder.registerReadListener(readListener);
      }
      return excelReaderBuilder;
     }
    
     /**
      * Build excel the read
      *
      * @param inputStream
      *   Input stream to read.
      * @return Excel reader builder.
      */
     public static ExcelReaderBuilder read(InputStream inputStream) {
      return read(inputStream, null, null);
     }
    
     /**
      * Build excel the read
      *
      * @param inputStream
      *   Input stream to read.
      * @param readListener
      *   Read listener.
      * @return Excel reader builder.
      */
     public static ExcelReaderBuilder read(InputStream inputStream, ReadListener readListener) {
      return read(inputStream, null, readListener);
     }
    
     /**
      * Build excel the read
      *
      * @param inputStream
      *   Input stream to read.
      * @param head
      *   Annotate the class for configuration information.
      * @param readListener
      *   Read listener.
      * @return Excel reader builder.
      */
     public static ExcelReaderBuilder read(InputStream inputStream, Class head, ReadListener readListener) {
      ExcelReaderBuilder excelReaderBuilder = new ExcelReaderBuilder();
      excelReaderBuilder.file(inputStream);
      if (head != null) {
       excelReaderBuilder.head(head);
      }
      if (readListener != null) {
       excelReaderBuilder.registerReadListener(readListener);
      }
      return excelReaderBuilder;
     }
    모든 방법 이 여기에 있 습 니 다.사실 어떤 read 방법 을 사용 해 야 하 는 지 알 수 없다 면 자신 이 얻 을 수 있 는 매개 변수 에 따라 판단 할 수 있 습 니 다.
    확장
    로 컬 Excel 읽 기
    
    public static void main(String[] args) {
     EasyExcel.read("C:/Users/Lonely Programmer/Desktop/   Microsoft Excel    .xlsx"
         ,ExcelEntity.class
         ,new UploadExcelListener())
      .doReadAll();
    }
    로 컬 엑셀 을 읽 는 것 과 InPutStream 흐름 을 통 해 읽 는 방식 은 같 습 니 다.매개 변수 가 바 뀌 었 을 뿐 원래 InPutStream 흐름 을 전 달 했 는데 지금 은 파일 의 절대 경 로 를 전 달 했 습 니 다.저 는 여기 서 감청 류 와 맵 실체 류 가 변 하지 않 았 습 니 다.업로드 와 같은 것 을 사용 합 니 다.여러분 도 수요 에 따라 자신의 감청 류 와 실체 류 를 설정 할 수 있 습 니 다.
    MultipartFile 문서
    MultipartFile 문서 주소:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/MultipartFile.html
    번역 은 Google Chrome 자체 번역 플러그 인 을 통 해 이 루어 집 니 다.Google Chrome 을 사용 하여 직접 번역 기능 을 사용 하 는 것 을 권장 합 니 다.
    在这里插入图片描述
    SpringBoot 가 Easy Excel 을 통합 하여 Excel 가 져 오 는 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 SpringBoot 가 Excel 가 져 오 는 내용 에 대해 서 는 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기