Spring & Spring Boot

[SpringBoot] 엑셀 값 가져오기(.xls & .xlsx)

김먼저 2023. 3. 6. 13:09

엑셀에는 두 가지 확장자가 있습니다.

 

.xls : 97-03 통합문서로 과거의 엑셀 파일. HSSF~
.xlsx : 요즘 엑셀 문서의 확장자명. XSSF~, SXSSF~(대용량처리)

 

 

gradle

implementation 'org.apache.poi:poi:5.2.2'
implementation 'org.apache.poi:poi-ooxml:5.2.2'

 

 

import

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.*;

 

저는 Amazos S3에서 inputStream으로 가져와 파일을 읽는 경우입니다.

 

(MultipartFile을 InputStream 으로 가져와도 됩니다.)

 

 

 

코드

Workbook workbook = null;
if(resourcePath.endsWith(".xlsx")){
	workbook = new XSSFWorkbook(file);
}else if(resourcePath.endsWith(".xls")){
	workbook = new HSSFWorkbook(file);
}else{
	throw new RuntimeException("file type not matched");
}
if(workbook == null){
	throw new RuntimeException("no data in file");
}

// 해당 인덱스에 있는 시트를 반환.
Sheet sheet = workbook.getSheetAt(0);

// 모든 행의 개수를 반환.
int rows = sheet.getPhysicalNumberOfRows();

// 지정된 행 번호에 해당하는 row 데이터를 반환.
Row row = sheet.getRow(rowIdx);

// 지정된 셀 번호에 해당하는 Cell 값을 반환.
Cell cell = row.getCell(1);

// 셀의 값을 String타입으로 반환.
String cellText = cell.getStringCellValue();

 

위 메서드들을 조합하며 엑셀 파일의 셀 데이터를 읽거나 쓸 수 있습니다.