개발언어/Java

[Java] 엑셀 파일(.xls) 읽기

양쏘쏘 2021. 1. 31. 14:00
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