728x90
반응형

자바에서 엑셀 파일(.xls)을 읽어오는 방법입니다.
이클립스에서 poi 라이브러리 다운로드 및 추가 방법은 아래 글을 참고해주세요
https://yangsosolife.tistory.com/7
[Java] POI 라이브러리 다운로드
자바에서 엑셀 파일(.xls)을 편하게 읽기 위해서 POI 라이브러리를 사용해보겠습니다. 1. POI 라이브러리 다운로드 archive.apache.org/dist/poi/release/src/ Index of /dist/poi/release/src archive.apache.or..
yangsosolife.tistory.com
프로젝트에 poi.jar와 commons-math.jar를 꼭 추가해주세요.
전체적인 코드 흐름은 엑셀 파일(.xls)을 읽어와서 시트 갯수/행 갯수/셀 갯수를 통해
엑셀에 저장된 값을 타입별로 받아와서 출력해줍니다.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.NumberFormat;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class DownloadExcel {
public static void main(String[] args) {
String path = ""; //파일 경로 설정
String filename = "test.xls"; //파일명 설정
readExcel(path,filename);
}
public static void readExcel(String path,String filename) {
try {
FileInputStream file = new FileInputStream(path+filename);
HSSFWorkbook workbook = new HSSFWorkbook(file);
NumberFormat f = NumberFormat.getInstance();
f.setGroupingUsed(false); //지수로 안나오게 설정
//시트 갯수
int sheetNum = workbook.getNumberOfSheets();
for(int s = 0; s < sheetNum; s++) {
HSSFSheet sheet = workbook.getSheetAt(s);
//행 갯수
int rows = sheet.getPhysicalNumberOfRows();
for(int r = 0 ; r < rows ; r++) {
HSSFRow row = sheet.getRow(r);
int cells = row.getPhysicalNumberOfCells();
System.out.print("| "+r+" |");
for(int c = 0 ; c < cells; c++) {
HSSFCell cell = row.getCell(c);
String value = "";
if(cell!=null) {
//타입 체크
switch(cell.getCellType()) {
case STRING:
value = cell.getStringCellValue();
break;
case NUMERIC:
value = f.format(cell.getNumericCellValue())+"";
break;
case BLANK:
value = cell.getBooleanCellValue()+"";
break;
case ERROR:
value = cell.getErrorCellValue()+"";
break;
}
}
System.out.print(" "+value+" |");
}
System.out.println();
}
}
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}


테스트 엑셀파일 내용과 출력 결과물입니다.
시트 여러개를 읽어올게 아니면 sheetNum을 가져오는 부분과 제일 바깥쪽 for문을 제거해주시고
0번째 시트를 읽어올 수 있도록 아래와 같이 workbook.getSheetAt(0)으로 코드를 수정해주시면 됩니다.
/*시트 갯수
int sheetNum = workbook.getNumberOfSheets();
for(int s = 0; s < sheetNum; s++) {
...
}
*/
HSSFSheet sheet = workbook.getSheetAt(0);
그리고 엑셀에서 숫자길이가 길어지면 지수로 바껴서 출력되기 때문에 아래처럼 포맷을 지정해주시는게 좋습니다.
NumberFormat f = NumberFormat.getInstance();
f.setGroupingUsed(false); //지수로 안나오게
...
value = f.format(cell.getNumericCellValue())+"";
728x90
'개발언어 > Java' 카테고리의 다른 글
[Java] 해쉬 HashMap 개념 사용법 총정리 (1) | 2023.03.07 |
---|---|
[Java] 자바 Queue 큐 개념 사용법 총정리 (0) | 2023.03.03 |
[Java] POI 라이브러리 다운로드 (1) | 2021.01.31 |