JAVA
JAVA - POI를 활용하여 자바에서 엑셀(.xlsx) 읽기
Park.S.W
2019. 12. 13. 11:50
반응형
자바에서 POI 라이브러리를 활용하여 엑셀 읽기를 해보겠다.
과거버전 xls가 아닌 xlsx를 다루는점 참고하길 바라며, 라이브러리는 apache에서 다운받아 사용하거나
maven추가로 사용하면 된다.
지금부터만드는 자바Class 및 함수는 엑셀을 읽고 List로 리턴하는 함수이다.
Maven추가
<!-- excel -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
POI 3.17버전으로 사용하였다.
JAVA 엑셀을 읽는 XlsxUtils Class 생성
package egov.mongo.utils;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class XlsxUtils {
@SuppressWarnings("resource")
public static List<List<String>> readToList(String path){
List<List<String>> list = new ArrayList<List<String>>();
try {
FileInputStream fi = new FileInputStream(path);
XSSFWorkbook workbook = new XSSFWorkbook(fi);
XSSFSheet sheet = workbook.getSheetAt(0);
for(int i=0; i<sheet.getLastRowNum(); i++) {
XSSFRow row = sheet.getRow(i);
if(row != null) {
List<String> cellList = new ArrayList<String>();
for(int j=0; j<row.getLastCellNum(); j++) {
XSSFCell cell = row.getCell(j);
if(cell != null) {
cellList.add( cellReader(cell) ); //셀을 읽어와서 List에 추가
}
}
list.add(cellList); // 추가된 로우List를 List에 추가
}
}
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
return list;
}
@SuppressWarnings("incomplete-switch")
private static String cellReader(XSSFCell cell) {
String value = "";
CellType ct = cell.getCellTypeEnum();
if(ct != null) {
switch(cell.getCellTypeEnum()) {
case FORMULA:
value = cell.getCellFormula();
break;
case NUMERIC:
value=cell.getNumericCellValue()+"";
break;
case STRING:
value=cell.getStringCellValue()+"";
break;
case BOOLEAN:
value=cell.getBooleanCellValue()+"";
break;
case ERROR:
value=cell.getErrorCellValue()+"";
break;
}
}
return value;
}
}
스트림을 통해 파라미터로 넘어온 경로를 확인하고 엑셀파일을 엑셀Workbook에 읽어서 파싱을 시작한다.
첫번째 시트만 읽도록 처리해놨다.
로우의 수만큼 차례대로 셀을 확인하여 셀의 타입을 cellReader함수에서 체크하고 List배열에 담는다.
Main.java
public class Main {
public static void main(String[] args) {
String filePath = "C:/test/ttt.xlsx";
List<List<String>> readList = XlsxUtils.readToList(filePath);
readList.forEach(row->{
row.forEach(cell->{
System.out.print(cell+", ");
});
System.out.println();
});
}
}
위 문법이 어렵다면(자바 1.8이하라면)
아래방법 for문으로 확인하면 된다.
public class Main {
public static void main(String[] args) {
String filePath = "C:/test/ttt.xlsx";
List<List<String>> readList = XlsxUtils.readToList(filePath);
for(int i=0; i<readList.size(); i++) {
for(int j=0; j<readList.get(i).size(); j++) {
System.out.print(readList.get(i).get(j)+", ");
}
System.out.println();
}
}
}
정상적으로 엑셀 데이터를 읽어와서 List에 담긴걸 확인할 수 있다.
반응형