Learn/KH정보교육원

[KH정보교육원 당산] 12일차 (외부 라이브러리 사용 - 엑셀파일 만들기, 설계도 구성 연습)

Dahoon06 2021. 3. 25. 09:58
728x90
반응형

jxl.jar 라이브러리 사용

=> project -> Build Path를 통하여 jar파일(라이브러리)을 추가 해줘야한다.!!

 

엑셀 파일 생성 및 쓰고 저장

 

1. 파일 다루기 위한 File 객체 필요 : new File("저장할 경로 및 파일명.xls); => import java.io.File;

 

2. 엑셀파일 구조 : WorkBook.createWorkbook(File객체);  // WritableWorkbook 객체를 반환

WritableWorkbook wb = new WorkBook.createWorkbook(File객체); // 이거 자체가 객체를 반환

=> import  jxl.write.WritableWorkbook;

 

3. 다음 sheet 생성 : wb.createSheet("시트이름","시트위치(인덱스번호)"); => WritableSheet 반환(쓰기위한 시트)

WritableSheet s1 = wb.createSheet("첫번째",0); 이런 형태

=> import  jxl.write.WritableSheet;

 

4. 다음 입력 받을 수 있는 Label 객체 생성 : new Label(열번호, 행번호, "데이터");

Label label = new Label(0,0,"데이터"); // 첫번째 칸, 첫번째 행에, 데이터 값을 집어넣겠다

=> import  jxl.write.Label;

 

5. s1.addCell(label); 생성된 시트의 기본 셀에 라벨 객체 추가

=> import jxl.Cell;

 

6. 실제 적용(쓰기)

wb.write();

 

7.파일 저장 및 닫기

wb.close();

 

생성 된 파일력 받을 수 있는 Label 객체 생성 : new Label(열번호, 행번호, "데이터");

 

작성한 엑셀파일을 가져오기

 

1. 마찬가지로 파일을 다루는 것이기에 File클래스의 객체를 만들어야한다.

File f = new File("파일이 있는경로");

 

2. 읽기만 할거이므로 WorkBook 클래스 사용

=> import jxl.Workbook;

 

3. getWorkbook 메소드를 사용하여 파일 열기

 

4. 몇번째 시트를 열건지 정해서 해당하는 시트열기 Sheet클래스 getSheet메소드

=> import jxl.Sheet;

 

5.몇번째 셀을 가져올것인지 정해서 값 넘겨주기 Cell클래스의 getCell메소드

=> import jxl.Cell;

 

콘솔에 출력된 값

 

 

 

 

예제)

엑셀을 읽어서 결혼하고 집소유자들의 정보bank_data.html과 bank_data.xls로 각각 저장하기

단, 검색조건은 콘솔창에서 입력 

 

MainClass : 전체 흐름을 담당 (일종의 Controller) / main() 포함

BankClass : 모든 변수들은 모두 외부 접근 불가!!!​

                loan : 대출 여부 (있음, 없음, 모름 등..)

                duration​ : 은행 가입 기간 (일 단위)

                contact : 연락방법 (한글로 저장 : 학생, 은퇴,  등..)

CustomerClass : 모든 변수들은 모두 외부 접근 불가!!!   BankClass 를 상속

                      age : 나이 (숫자로 저장)

                      job : 직업(한글로 저장 : 학생, 은퇴,  등..)

                      marital : 결혼 여부 (한글로 저장 : 기혼, 미혼, , 이혼, 모름 등)

                      housing : 집 소유 여부 (한글로 저장 : 소유, 미소유, 모름)

DataClass : 전체 데이터를 보유 : CustomerClass 객체들 저장

MethodsInterface : MethodClass에서 사용할 메서드 명들을 정의

                                                MethodClass : 실행 메서드들만  보유  /  해당 메서드들은 MethodsInterface 를 구현받음

ExcelReaderClass​ : 엑셀 파일 읽기 / 해당 메서드들은 객체 생성 없이 사용할 수 있도록 선언​ 

ExcelWriterClass​ : 엑셀 파일 쓰기​ / 해당 메서드들은 객체 생성 없이 사용할 수 있도록 선언​ 

PrintClass :  출력 전용 클래스

                "c:/filetest/bank_data.html" 파일을 생성하는 역할 담당 

                해당 메서드들은 객체 생성 없이 사용할 수 있도록 선언​ 

 

 

1차 설계..

 

MainClass => 엑셀 파일의 경로를 지정 

BankClass => 대출,은행가입기간, 연락방법 변수 선언

CustomerClass => 나이,직업,결혼여부,집소유여부 변수선언 => 데이터를 영어 -> 한글로 변환

                                                                                   문자열로 들어오는 값을 정수형으로 변환

이 클래스에서 한글로 변환시켜 값을 돌려줄것이기에 변환 메소드 생성

EnglishToHangul => 값을 받을 매개변수 선언( 영어, 한글)

DataClass => 데이터 2타입 선언 => 1. 변환된 데이터를 담을 데이터 변수

                                                2.전체 데이터를 담을 데이터 변수

ExcelReaderClass => 엑셀 파일을 읽어오는 클래스

 

MainClass

 

BankClass

 

EnglishTOHangul => 한영 변환을 위해

 

 

DataClass

 

 

 

CutomerClass => 문제에 나와있는것처럼 BankClass 를 상속 받는다.

 

 

 

 

파일을 읽어오는 클래스

ExcelReaderClass의 loadExcel메소드 (1차) => 코드의 중복이 많다.

 

 

다음에 이 메소드의 코드를 줄이는 작업을 할 것이다.

 

 

 

첫번째 try 구문 안에 나열되어있던 cell을 배열 처리 함으로써 코드가 줄었다.

 

다음 작업은 두번째 try구문안에 있는 cell들을 줄일 것이다.

 

 

 

최종 클래스 코드

최종 코드

두번째 try구문안의 cell의 규칙성을 찾아냄 => 반복문인 for문을 사용하여 좀 더 간략하게 줄임.

 

 

 

 

1차 테스트 출력

 

2차 설계..

 

콘솔로부터 2가지 검색어를 입력받아 맞는 값을 찾아서 값에 맞는 HTML파일을 만들 것이다.

필요한 메소드 2개  :  1.검색을 위한 메소드, (2개의 값을 받기에 매개변수도 2개 선언)

                            2.HTML을 만들 메소드

단, 메소드는 MethodInterface에서 오버라이딩 하여 만들것

 

MainClass

일단 Scanner클래스 까지만 생성 해놓고 MethodClass로 이동

 

 

인터페이스 생성

1. 검색을 위한 메소드 생성

 

2. 검색 결과를 토대로 HTML파일을 생성하는 메소드 생성

 

MethodClass 

메인에서 실행 시켜야 하기 때문에 return값이 있어야 한다.

 

리턴된 값을 PrintClass로 보내서 파일 생성 마무리

 

 

 

 

 

콘솔창 출력

 

생성된 HTML 파일

빈칸.. admin이 잘못 적혀있어서 비어있다 admin => admin. 으로 변경

 

3차 설계..

 

만들어진 데이터를 가지고 엑셀 파일 만들기 

Main => 파일 생성 경로 설정 및 생성 메소드 호출

ExcelWriterClass => 파일을 만들기위한 File클래스WritableWorkbook 클래스 사용

                           엑셀 파일 만들때 먼저 구조를 만들고(Workbook->createWorkbook메소드)

                           시트와 글을 입력할 수 있게 라벨을 만들어 cell에 저장

 

1차 코드(중복이 많다)

for문 안쪽에 중복 코드가 많다. 줄여보자

 

 

2차 코드

먼저  Label을 배열로 묶어 주었다.

 

그리고 계속 반복됐던 result.addCell(label);을 for문으로 묶어줌

 

 

 

제목이없어서 구별하기 힘들다..

 

데이터 위에 제목을 추가해보자.

 

먼저 데이터 클래스에다 헤더 부분 데이터를 추가시켜준다.

 

 

 

ExcelWriterClass로 돌아와서 제목부분을 추가 할 코드 작성

 

 

 

 

 

기존의 label[ ] 내부의 공통적인 코드를 변수에 저장하여 코드 길이를 한번 더 줄여줬다.

 

 

보기 쉽게 제목이 추가되었다.
메인 추가 코드

끝!

728x90
반응형