본문 바로가기

Language/Java / JSP

[Java] 엑셀 파일 만들기

반응형

필요에 의해 엑셀 파일을 만들어야 하는 경우가 있다.
특히 CMS 같은 솔루션에서는 통계나 기타 정보등을 운영자가 쉽게 확인하고자 데이터를 엑셀 파일로 생성해 달라고 할때가 있다.

매번 DB 클라이언트 툴을 이용하여 엑셀로 export 하고 해당 데이터를 다시 담당자에게 전달하고는 하는데
어려운 일은 아니지만 요청이 많아지면 생각보다 귀찮다.

이럴때는 차라리 CMS에 엑셀 다운로드 기능을 만들던지, 아니면 툴을 만들어서 자동으로 엑셀파일을 생성할 수 있게끔 하면 편하다.



Java에서 엑셀 파일을 생성하는것은 JXL 라이브러리를 이용하면 손쉽게 생성이 가능하다.


JXL 홈페이지 : http://jexcelapi.sourceforge.net/



라이브러리는 JXL 홈페이지에서 다운받거나 아래 다운로드를 이용하면 된다.

jxl.jar



파일을 쓸때는 엑셀 2000 포맷으로만 가능한데. 이 부분은 상위 버전의 엑셀에서는 호환보기로 열리니까 큰 문제는 없다.



사용법이 의외로 간단하여 아레 예제 소스만 봐도 이해가 쉽게 된다.

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;


public class GenerateExcel {

	public static void main(String[] args) {
		
		
		// 엑셀파일 객체 생성
		WritableWorkbook workbook = null;
		
		// 시트 객체 생성
		WritableSheet sheet = null;
		
		// 셀 객체 생성
		Label label = null;
		
		
		// 저장할 파일 객체 생성
		File file = new File("C:\\test.xls");
		
		
		// 테스트 데이터
		HashMap hm_0 = new HashMap() ;
		hm_0.put("name", "홍길동") ;
		hm_0.put("age", "21") ;
		
		HashMap hm_1 = new HashMap() ;
		hm_1.put("name", "김영희") ;
		hm_1.put("age", "20") ;
		
		List list = new ArrayList();
		list.add(hm_0) ;
		list.add(hm_1) ;
		
		
		try{
			
			// 파일 생성
			workbook = Workbook.createWorkbook(file);
			
			// 시트 생성
			workbook.createSheet("sheet1", 0);
			sheet = workbook.getSheet(0);
			
			// 셀에 쓰기
			label = new Label(0, 0, "name");
			sheet.addCell(label);
			
			label = new Label(1, 0, "age");
			sheet.addCell(label);
			
			
			
			// 데이터 삽입
			for(int i=0; i < list.size(); i++){
				HashMap rs = (HashMap)list.get(i) ;
				
				label = new Label(0, (i+1), (String)rs.get("name"));
				sheet.addCell(label);
				
				label = new Label(1, (i+1), (String)rs.get("age"));
				sheet.addCell(label);
				
			}
			
			
			workbook.write();
			workbook.close();

		}catch(Exception e){
			e.printStackTrace();
		}
		

	}

}



셀에 내용을 기록할때에는 new Label()을 사용하면 되는데, 아래와 같이 순서만 잘 기억하면 된다.


new Label(열 순서, 행 순서, "작성 문자열");

참고로 열/행 순서는 0부터 시작한다.