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>
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 감청 류 만 들 기
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 시 뮬 레이 션 을 통 해 요청 을 보 냅 니 다.
반환 값 은 다음 과 같 습 니 다:
같은 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 가 져 오 는 내용 에 대해 서 는 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.