poi 라이브러리를 활용하여 엑셀 열(column) 별로 데이터 가져와 ArrayList에 넣기
2019. 5. 2. 12:41
반응형
기본 코드는 이 링크를 참고하였습니다.
https://javaslave.tistory.com/78
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 |