본문 바로가기

IT

jxl 을 이용하여 cell에 데이터 입력하기

반응형

 jxl을 이용하는 두번째 글로써 지금부터 진행하는 작업은 WritableWorkbook이 정상적으로 생성되어 준비가 된 상태라 생각하고 진행합니다.

 WritableWorkbook 생성에 대한 부분은 jxl (Java Excel Library) 를 이용한 기존 xls 파일을 복사하여 사용하기 란 글이나 기타 인터넷상의 글을 참고하시기 바랍니다.


 cell에 원하는 데이터를 입력하는 방법은 두가지가 있습니다.


 하나는 cell 을 읽어와서 cell의 타입을 조사하고 해당 타입과 같은 수정가능한 데이터타입으로 형변환(Casting)을 거친후 set 메소드를 이용하여 데이터를 입력하는 방법이 있습니다.


 저장할 데이터(jxl.write.*) 를 우선적으로 생성하고, WritableSheet에 데이터를 추가하는 방법이 있습니다.


 위 설명한 두가지 방법은 단순히 진행방법의 차이일 뿐입니다만... 저는 후자가 훨씬 마음에 듭니다. (일단 형변환에 대한 부담이 없습니다.)


 그래도 두가지 다 설명은 드려야겠지요..


try {
	// 수정가능한 Sheet를 얻는다.
	WritableSheet writableSheet = writableWorkbook.getSheet(0);
	// Sheet에서 수정가능한 형태로 cell을 추출한다.
	WritableCell cell = writableSheet.getWritableCell(1, 0);
	
	// cell의 타입을 조사한다.
	if (cell.getType() == CellType.LABEL) {
		// 형변환한다.
		jxl.write.Label label = (Label) cell;
		// 데이터를 입력한다.
		label.setString("테스트");
	}
} catch (Exception e) {
	e.printStackTrace();
}

 이것이 첫번째 방법입니다. 하지만 이게 부담이 큰 것이.. getType()으로 데이터타입을 비교하지 않으면 형변환하는 과정에서 예외가 발생한다는 것입니다. 생각해보면 엑셀의 셀이 숫자가 들어갈지, 문자가 들어갈지 모두 정의해야 한다는 이야기인데, 이거 골치아프죠.. 자 위의 방법은 버립니다. 머리 아프니까요.. (형변환이 있으면 정말 귀찮은 일이 많습니다.)


 두번째 방법으로 갑니다.


try {
	// 수정가능한 Sheet를 얻는다.
	WritableSheet writableSheet = writableWorkbook.getSheet(0);
	
	final int IDX_X = 1;
	final int IDX_Y = 0;
	
	// cell 데이터를 생성
	jxl.write.Label cellTestLabel = new Label(IDX_X, IDX_Y, 
			"테스트",
			writableSheet.getWritableCell(IDX_X, IDX_Y).getCellFormat());
	// sheet 에 생성한 데이터를 추가한다.
	writableSheet.addCell(cellTestLabel);
} catch (Exception e) {
	e.printStackTrace();
}

 자 위의 방법을 봅시다. Sheet를 얻었구요. 저장할 데이터를 먼저 생성하는 군요.. 잘 보시면 생성할 때 저장되는 cell의 위치(IDX_X, IDX_Y)를 지정하네요. addCell을 진행하면서 자신이 어디에 들어가는지 알아야 하니까요.. "테스트"라는 데이터 이외에도 getCellFormat()이라는 게 보이는군요. 이것은 서식이라고 보시면 됩니다. 테두리나 배경색, 글자크기등은 cell이 저장될 위치의 것을 그대로 사용하겠다는 것이지요.


 서식도 그래도 가져다 쓸 수 있다, 저장할 데이터 타입은 jxl.write. 패키지에서 원하는 데이터타입을 이용하면되고, 위에 형변환해야 하는 과정도 없고, 서식도 저장되는 셀위치의 것을 그대로 사용할 수 있다. 얼마나 큰 이점이 많습니까 ^^;;;;


 이로써 셀에 데이터를 추가하는 방법에 대해서도 알아보았습니다. 끝.

반응형