SpringBoot 는 Easy Excel 을 통합 하여 Excel 가 져 오 는 방법 을 실현 합 니 다.
                                            
 12726 단어  SpringBootExcel가 져 오기
                    
배경
왜 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>
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;
 }
}
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);
 }
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;
 }
}
server:
 #      
 port: 8080
spring:
 servlet:
 multipart:
  #           
  file-size-threshold: 100M
  #        
  max-request-size: 300M우 리 는 먼저 간단 한 엑셀 을 만들어 서 테스트 를 한다.
 
 그리고 Postman 시 뮬 레이 션 을 통 해 요청 을 보 냅 니 다.
 
 반환 값 은 다음 과 같 습 니 다:
같은 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
 }
]
/**
  * 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;
 }확장
로 컬 Excel 읽 기
public static void main(String[] args) {
 EasyExcel.read("C:/Users/Lonely Programmer/Desktop/   Microsoft Excel    .xlsx"
     ,ExcelEntity.class
     ,new UploadExcelListener())
  .doReadAll();
}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 가 져 오 는 내용 에 대해 서 는 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.