관심이 많아서 네이버를 통해서 학습을 하고자 했는데 일관된 예제들과 생각보다는 부족한 설명으로
인해 많은 이해하기 위해 많은 시간을 보낸 것 같습니다. 개인적으로 공부차원에서 오늘 맘잡고 정리하여
공유합니다. 주석을 완전히 달면서 API 문서를 보려고 하니 생각보다 시간이 많이 걸리더군요.
이클립스를 주로 다루기 때문에 코딩하고 실행하였을 때 이클립스 상에서는 오류가 없었습니다.
혹시라도 실행이 안 되면 답글 달아주시면 바로 수정하겠습니다.
저는 jxl api를 이용하여 정리하였습니다. 참고 바랍니다.
1. 준비사항
당연히 이클립스를 사용하신다면 jxl api(링크주소) 중에서 jexcelapi_2_6_4.zip 를 다운 받아서
사용하시는 프로젝트 파일 주변에 압축을 풀어주세요.
(하단의 색깔부분이 수정된 내용입니다. 배포시 문제 발생 여지가 있어서 수정합니다.)
이클립스 메뉴바에서 현재의 프로젝트명을 오른쪽 클릭 - Build Path - Add Jar Field 클릭한 후
jxl API를 다운받아서 압축을 푼 곳에서 jxl.jar 파일을 찾아서 삽입시켜야 해요. 배포를 고려한다면
엄한 곳에서 가져오지는 마세요 → (필독 : 사이트 링크)
2. 실전
jxl api 폴더 내의 doc폴더 안을 보시면 java api와 똑 같은 형태의 api문서를 확인하실 수 있습니다.
너무 자세하죠? 이제부터 주석을 꼼꼼히 보시면서 실행해 보시면 기분이 좋아지실 겁니다. ^^
3. Jxl_Write.java (엑셀 파일을 생성하는 부분)
//babypanda(2007.07.24)
import! java.io.File; // 파일 생성을 위해서 필요
import! java.io.FileNotFoundException; // 파일 생성을 위해서 필요
import! java.io.IOException; // 파일 생성을 위해서 필요
/* 아래의 jxl 부분을 이클립스에서 사용하시기 위해서는 메뉴바에서 현재의 프로젝트명을 오른쪽 클릭 - Build Path - Add External Archives 클릭한 후, jxl API를 다운받아서 압축을 푼 곳에서 jxl.jar 파일을
찾아서 삽입시켜야 해요. 꼭.... 반드시.... 무조건.... 배포를 고려한다면 엄한 곳에서 가져오지는 마셈.
가까운 곳에 압축을 풀어서 불러오셈. ^^ */
import! jxl.Workbook; // 엑셀 파일 관리를 위해 처음과 끝에 해당하는 기본이 되는 추상 클래스
import! jxl.write.WritableWorkbook; // 실제 엑셀 파일 관리를 위해 Workbook, Sheet을 생성하는
Swing의 Frame과 같은 사막의 오아시스 역할하는 추상 클래스
import! jxl.write.WritableSheet; // 쉬트를 관리하는 인터페이스
import! jxl.write.WritableCellFormat; // 셀의 포멧 관련 클래스
import! jxl.write.WriteException; // 셀의 쓰기 오류를 관리하기 위한
import! jxl.write.Label; // 라벨 관리 클래스
//import! jxl.write.Blank; // 빈셀 관리 클래스
import! jxl.format.*; // 셀 정렬, 보더, 컬러 부분 관련 클래스 임포트
public class Jxl_Write{
public static void main(String args[]) throws FileNotFoundException, IOException, WriteException{
// 예외처리를 아예 해주고 내려옵니다.
WritableWorkbook myWorkbook = Workbook.createWorkbook(new File("jxl_Smile.xls"));
// 파일이름을 정하여 생성한다.
WritableSheet mySheet = myWorkbook.createSheet("first sheet", 0);
// WritableSheet는 인터페이스
/* WritableWorkbook에서 메소드를 이용하여 생성. 0번, 즉 첫번째 쉬트를 first sheet라는 이름으로
생성한다. */
WritableCellFormat numberFormat = new WritableCellFormat(); // 번호 셀 포멧 생성
WritableCellFormat nameFormat = new WritableCellFormat(); // 이름 셀 포멧 생성
WritableCellFormat dataFormat = new WritableCellFormat(); // 데이터 셀 포멧 생성
/* 번호 레이블 셀 포멧 구성(자세한 것은 링크 된 API를 참조하셈) 참고사항
: 여기 부분에서 WriteException이 발생하네요.
그러나 상단에서 미리 예외 처리를 해서 상관 없겠네요. */
numberFormat.setAlignment(Alignment.CENTRE); // 셀 가운데 정렬
numberFormat.setVerticalAlignment(VerticalAlignment.CENTRE); // 셀 수직 가운데 정렬
numberFormat.setBorder(Border.ALL, BorderLineStyle.THICK); // 보더와 보더라인스타일 설정
numberFormat.setBackground(Colour.ICE_BLUE); // 여름에 맞는 색깔 ? ^^
// 이름 레이블 셀 포멧 구성(자세한 것은 링크 된 API를 참조하셈)
nameFormat.setAlignment(Alignment.CENTRE); // 셀 가운데 정렬
nameFormat.setVerticalAlignment(VerticalAlignment.CENTRE); // 셀 수직 가운데 정렬
nameFormat.setBorder(Border.BOTTOM, BorderLineStyle.HAIR); // 보더와 보더라인스타일 설정
nameFormat.setBackground(Colour.GOLD); // 여름에 맞는 색깔 두번째 ? ^^
// 데이터 셀 포멧 구성
dataFormat.setAlignment(Alignment.CENTRE); // 셀 가운데 정렬
dataFormat.setVerticalAlignment(VerticalAlignment.CENTRE); // 셀 수직 가운데 정렬
// 쉬트의 컬럼 넓이 설정
mySheet.setColumnView(0, 8);
// 쉬트의 번호 컬럼(0번째)의 넓이 설정. setCloumnView(몇번째 컬럼, 넓이)
mySheet.setColumnView(1, 15); // 쉬트의 이름 컬럼(1번째)의 넓이 설정
mySheet.setColumnView(2, 20); // 쉬트의 비고 컬럼(2번째)의 넓이 설정
// 라벨을 이용하여 해당 셀에 정보 넣기 시작
Label numberLabel = new Label(0, 0, "학번", numberFormat); // 학번 라벨(열,행,"문장",포멧)
mySheet.addCell(numberLabel); // 쉬트의 addCell 메소드를 사용하여 삽입
Label nameLabel = new Label(1, 0, "성명", nameFormat); // 성명 라벨(열,행,"문장",포멧)
mySheet.addCell(nameLabel); // 쉬트의 addCell 메소드를 사용하여 삽입
// Blank blank = new Blank(2, 0, numberFormat);
// 빈 셀(열,행,포멧) -- 필요 시 주석 처리 풀고 사용하셈. ^^
// sheet.addCell(blank);
Label postScript = new Label(2, 0, "비고", nameFormat); // 비고 라벨(열,행,"문장",포멧)
mySheet.addCell(postScript); // 쉬트의 addCell 메소드를 사용하여 삽입
for(int no=1; no<6; no++){
// 데이터 포멧에 맞게 1에서 5까지 번호 생성
Label numberLabels = new Label(0, no, "["+no+"]", dataFormat);
mySheet.addCell(numberLabels); // 셀에 삽입
Label nameLabels =new Label(1, no, (char)(no+64)+"", dataFormat);
// 데이터 포멧에 맞게 대문자 A에서 E까지 생성
mySheet.addCell(nameLabels); // 셀에 삽입
}
// 라벨을 이용하여 해당 셀에 정보 넣기 끝
myWorkbook.write(); // 준비된 정보를 엑셀 포멧에 맞게 작성
myWorkbook.close(); // 처리 후 메모리에서 해제 처리
}
}
4. Jxl_Read.java (엑셀파일을 읽어오는 부분)
//babypanda(2007.07.24)
import! java.io.*; // 파일 입력 관련 클래스
import! jxl.*; // jxl 관련 클래스
public class Jxl_Read{
public static void main(String args[]) throws FileNotFoundException, IOException,jxl.read.biff.BiffException{
// 이번에도 파일과 엑셀 파일 입력 관련 예외 선언을 미리 해주고 들어옵니다.
Workbook myWorkbook = Workbook.getWorkbook(new File("jxl_Smile.xls")); // 파일을 읽어 와서
Sheet mySheet = myWorkbook.getSheet(0); // 정확한 쉬트를 입력 받아서...
System.out.print("학번\t성명\t비고\t\n"); // 엑셀 제목을 적어 주고
for(int no=1;no<6;no++){ // 행의 갯수 만큼 돌리고
for(int i=0;i<3;i++){ // 열의 갯수 만큼 돌려서
Cell myCell = mySheet.getCell(i,no); // 셀의 행과 열의 정보를 가져온 후...
System.out.print(myCell.getContents()+"\t"); // 텝의 거리 만큼 열을 나열 하고...
// getContents()메소드에 대해
/* Quick and dirty function to return the contents of this cell as a string.
이라고 API에 쓰여 있더군요. */
}
System.out.println(); // 행이 바뀔 때 마다 개행하여 출력해 보셈.
}
}
}
5. 실행화면
1) 엑셀에 쓰기
'IT_Programming > Java' 카테고리의 다른 글
개발자가 놓치기 쉬운 자바의 기본원리 (0) | 2008.01.27 |
---|---|
jxl.jar를 이용해서 Excel file 생성하기 (0) | 2008.01.25 |
jxl을 통한 엑셀 저장하기 (0) | 2008.01.25 |
클래스에서 enhanced For-Loop 사용 (0) | 2008.01.24 |
JTree로 드래그-앤-드롭(Adding Drop Support with JTree) 추가 (0) | 2008.01.24 |