IT_Programming/Java

[펌] java(자바)로 excel(엑셀) 파일 활용 (jxl api) 정리

JJun ™ 2008. 1. 25. 11:42
자바를 이용하여 엑셀을 다루는 방법이 여러가지 있습니다.

관심이 많아서 네이버를 통해서 학습을 하고자 했는데 일관된 예제들과 생각보다는 부족한 설명으로

인해 많은 이해하기 위해 많은 시간을 보낸 것 같습니다. 개인적으로 공부차원에서 오늘 맘잡고 정리하여

공유합니다. 주석을 완전히 달면서 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) 엑셀에 쓰기

 

 
 

2) 엑셀 파일의 비고란에 글자를 입력한 후 저장하여 읽어오면 ?

 

 

 
--------------------------------------------------------------------------------------
jxl_write.java
0.0MB
jxl_read.java
0.0MB