본문 바로가기

밥벌이1 - S/W/Java

java(자바)로 excel(엑셀) 파일 활용 (jxl api)

java(자바)로 excel(엑셀) 파일 활용 (jxl api) 정리 - 2007월 8월 16일 수정 | 서로 묻고 답해주기
2007.07.25 02:37
 

안녕하세요. Sharing Java 운영자 아기팬더 입니다. 자바를 이용하여 엑셀을 다루는 방법이 여러가지 있습니다.


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


많은 시간을 보낸 것 같습니다. 개인적으로 공부차원에서 오늘 맘잡고 정리하여 공유합니다. 주석을 완전히 달면서 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++){
          Label numberLabels = new Label(0, no, "["+no+"]", dataFormat); // 데이터 포멧에 맞게 1에서 5까지 번호 생성
          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) 엑셀 파일의 비고란에 글자를 입력한 후 저장하여 읽어오면 ?




 



출처 : http://cafe.naver.com/sharingjava/1471