poi 라이브러리를 활용하여 엑셀 열(column) 별로 데이터 가져와 ArrayList에 넣기
기본 코드는 이 링크를 참고하였습니다.
https://javaslave.tistory.com/78
POI Library를 이용한 Excel Read
Apache POI Grid 형태의 데이터를 핸들링 하는 화면에는 보통 '엑셀다운로드', '엑셀업로드' 버튼이 존재한다. 이를 구현하기 위해서 Apache에서 제공하는 POI 라이브러리를 이용하는 방법을 알아보도록 하자. Jav..
javaslave.tistory.com
POI 버전은 3.11을 사용하였습니다. (최신 poi 4점대 버전에서는 코드가 동작하지 않습니다)
poi 3.11 라이브러리 파일
용량 제한으로 압축파일 2개로 나뉘어 첨부함
사용 용도
위와 같은 엑셀 내용에서 각 열 별로 데이터를 긁어와 각 ArrayList에 저장함
로그인시
ID에는 ArrayList1.get(0)
암호에는 ArrayList2.get(0)
이런 식을 1:1 매칭해서 로그인에 활용하는 단순 용도
발생하는 문제점
첫 열의 개수에 따라 나머지 열의 개수가 결정됨
첫 열이 10개고 나머지 열이 20개,16개 등등 제 각기라면 첫 열 기준으로 모두 10개의 데이터만 가져오게 되는 문제가 존재함
전체 코드
package poi;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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 POIReader {
public static List<String> account1 = new ArrayList<String>();
public static List<String> account2= new ArrayList<String>();
public static List<String> account3 = new ArrayList<String>();
public static List<String> account4 = new ArrayList<String>();
public static List<String> account5 = new ArrayList<String>();
public static List<String> account6 = new ArrayList<String>();
/**
* XLSX 파일을 분석하여 List<poi> 객체로 반환
* @param filePath
* @return
* @return
*/
public static void xlsxTopoiList(String filePath) {
// 반환할 객체를 생성
FileInputStream fis = null;
XSSFWorkbook workbook = null;
try {
fis= new FileInputStream(filePath);
// XSSFWorkbook은 엑셀파일 전체 내용을 담고 있는 객체
workbook = new XSSFWorkbook (fis);
// 탐색에 사용할 Sheet, Row, Cell 객체
XSSFSheet curSheet;
XSSFRow curRow;
XSSFCell curCell;
// poiList vo;
// Sheet 탐색 for문
for(int sheetIndex = 0 ; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
// 현재 Sheet 반환
curSheet = workbook.getSheetAt(sheetIndex);
// row 탐색 for문
for(int rowIndex=0; rowIndex < curSheet.getPhysicalNumberOfRows(); rowIndex++) {
// row 0은 헤더정보이기 때문에 무시
if(rowIndex != 0) {
// 현재 row 반환
curRow = curSheet.getRow(rowIndex);
// vo = new poiList();
String value;
// row의 첫번째 cell값이 비어있지 않은 경우 만 cell탐색
System.out.println("---"+curRow.getCell(0));
if(curRow.getCell(0) != null){ // 첫번째열 모자를 때 구분
if(!"".equals(curRow.getCell(0).getStringCellValue())) {
// cell 탐색 for 문
for(int cellIndex=0;cellIndex<curRow.getPhysicalNumberOfCells(); cellIndex++) {
curCell = curRow.getCell(cellIndex);
if(true) {
value = "";
// cell 스타일이 다르더라도 String으로 반환 받음
if(curCell != null){ //각 열의 목록 길이에 따라 분기
switch (curCell.getCellType()){
case XSSFCell.CELL_TYPE_FORMULA:
value = curCell.getCellFormula();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
value = curCell.getNumericCellValue()+"";
break;
case XSSFCell.CELL_TYPE_STRING:
value = curCell.getStringCellValue()+"";
break;
case XSSFCell.CELL_TYPE_BLANK:
value = curCell.getBooleanCellValue()+"";
break;
case XSSFCell.CELL_TYPE_ERROR:
value = curCell.getErrorCellValue()+"";
break;
default:
value = new String();
break;
}
}
switch (cellIndex) {
case 0: // name
account1.add(rowIndex-1, value);
break;
case 1: // 암호
account2.add(rowIndex-1, value);
break;
case 2: // 여기서 하나씩 분류
account3.add(rowIndex-1, value);
break;
case 3: // 여기서 하나씩 분류
account4.add(rowIndex-1, value);
break;
case 4: // 여기서 하나씩 분류
account5.add(rowIndex-1, value);
break;
case 5: // 여기서 하나씩 분류
account6.add(rowIndex-1, value);
break;
default:
break;
}
}
}
}
}
}
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
// 사용한 자원은 finally에서 해제
if( workbook!= null)
workbook.close();
if( fis!= null) fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
'지식메모 > JAVA' 카테고리의 다른 글
자바 Swing에서 ArrayList를 JcomboBox에 집어넣기 (1) | 2019.04.28 |
---|---|
자바 스윙으로 파일 열기창 구현 (0) | 2017.06.14 |
json Array 내부에 있는 Json 데이터 추출하여 배열에 저장하기 (1) | 2017.03.29 |
자바 일정구간 문자열 추출하기 (0) | 2017.03.24 |
eclipse java.lang.SecurityException: class "org.hamcrest.Matchers"' 에러 해결하기 (0) | 2017.03.13 |