※ 흔히 POI를 엑셀을 핸들링 하기 위한 것으로만 오해하기 쉬운데, POI 프로젝트는 마이크로소프트 OLE 2 복합 도큐먼트 포맷의 파일을 순수 자바를 이용하여 핸들링하는 APIs로 구성되어 있다. OLE 2 복합 도큐먼트 포맷의 파일은 Microsoft 엑셀 혹은 워드 파일 등의 대부분의 오피스 파일들을 나타낸다.
일반적으로 엑셀에 대한 핸들링만을 수행할 때에는 Jxl을 권장한다. 엑셀을 핸들링 할 때 엑셀에서 가장 작은 단위는 "셀"이다. 모든 작업은 이 셀을 중심으로 이루어진다.
※ 주의할 점
엑셀 쉬트상에 "C15"라는 셀에 데이터가 있다고 가정하자 (15행 C열을 나타낸다). 이 때 Jxl에서는 A1 (1행 A열)부터 C15까지는 실제 데이터가 없을 경우에라도 null이 아닌 빈데이터가 있다고 인식한다. 즉, D열 이상이나, 16행 이상을 접근 할 때에 null로 인식한다. 하지만 POI에서는 C15 이내에 있다 하더라도 실제 데이터가 없을 때에는 null로 인식한다.
Jxl에서는 각 셀의 데이터 타입을 실제 엑셀 파일에서 지정된 셀의 타입을 따르고, POI에서는 셀의 실제 데이터 형을 따른다. 예를 들어 특정 셀의 타입을 text 로 잡아놓고, 데이터를 1234로 입력하면 Jxl에서는 "12345"로 인식하고, POI에서는 12345.00 이런 식으로 인식한다.
----------------------------------------------------------------------------------- HSSF를 이용해 자바에서 간단한 엑셀 파일을 생성하는 방법을 살펴보도록 하겠다. HSSF를 사용하기 위해서는 먼저 POI 라이브러리를 다운받아야 하는데 아래의 주소에 가서 라이브러리를 다운받은 후 클래스 패스를 잡아주면 된다.
public class NumberForm { public static void main(String[] args) throws IOException, InterruptedException { // 먼저 파일이 되는 workbook부분을 생성한다. HSSFWorkbook workbook = new HSSFWorkbook();
// workbook부분에 sheet를 새로 생성한다. HSSFSheet sheet = workbook.createSheet("new");
// sheet부분에 행을 새로 생성한다. HSSFRow row = sheet.createRow((short)0);
// 새로 생성된 행 부분에 셀을 추가한다. HSSFCell cell = row.createCell((short)0);
// 셀 값을 집어넣는다(숫자형) cell.setCellValue(1);
// 셀 값을 집어넣는다(실수형) row.createCell((short)1).setCellValue(1.2); // 셀 값을 집어넣는다(문자형) row.createCell((short)2).setCellValue("string"); // 셀 값을 집어넣는다(boolean형) row.createCell((short)3).setCellValue(true);
FileOutputStream outFile = new FileOutputStream("newexcelfile.xls"); workbook.write(outFile); outFile.close(); } }
새로이 Excel파일을 만드는 방법은 기본적으로 다음과 같다.
1. WorkBook를 만든다 (즉, 파일이 될 부분을 만든다) 2. WorkBook안에 sheet를 만든다 3. sheet안에 행을 만든다 4. 행 안에 기본단위인 셀을 만든다
## LONG TYPE을 LOB TYPE으로 CONVERSION하는 방법(TO_LOB) ##
Bulletin no 12143 참고
Oracle8 부터 LONG이나 LONG RAW Type과는 별도로 LOB Type이 추가 되었습니다.
LONG 이나 LONG RAW Type을 CLOB 또는 BLOB Type으로 변경하기 위해서는 Oracle8에서는 데이타를 다시 입력해야 했지만, 오라클 8i부터는 TO_LOB Function을 이용해서 Long Type의 Data를 LOB Type으로 쉽게 Conversion할 수 있습니다.
TO_LOB Function은 보통 CREATE TABLE .. AS SELECT .. 문장이나 INSERT INTO .. SELECT .. 문장을 이용해서 쉽게 사용 할 수 있습니다.
[예제1] LONG Type의 데이타를 CLOB Type으로 옮기는 방법 아래의 예제에서 Type만 LONG RAW와 BLOB으로로 바꾸어도 가능 합니다.
-- 마이그레이션 테스트를 위한 long컬럼을 가지는 테이블을 생성 합니다. SQL>CREATE TABLE long_data ( c1 NUMBER, c2 LONG);
테이블이 생성되었습니다.
-- 테이블의 확인 SQL> DESC long_data
Name Null? Type ----------- ------ ---- C1 NUMBER C2 LONG
-- 샘플 데이터를 입력 합니다. SQL>INSERT INTO long_data VALUES (1, 'This is some long data to be migrated to a CLOB'); 1 개의 행이 만들어졌습니다.
SQL>INSERT INTO long_data VALUES (2, 'long컬럼을 clob으로 마이그레이션 하기 위한 테스트 데이터 입니다.'); 1 개의 행이 만들어졌습니다.
-- clob로 마이그레이션 하는 테이블을 생성 합니다. SQL>CREATE TABLE test_lobs( c1 NUMBER, c2 CLOB);
테이블이 생성되었습니다.
-- 테이블의 확인 SQL> DESC test_lobs Name Null? Type ----------- -------- ---- C1 NUMBER C2 CLOB
-- LONG타입의 데이터를 CLOB타입의 데이터로 변환 SQL>INSERT INTO test_lobs SELECT c1, to_lob(c2) FROM long_data; 2 개의 행이 만들어졌습니다.
-- 변환된 데이터를 확인 합니다. SQL> SELECT c2 FROM test_lobs;
C2 ----------------------------------------------------------------- This is some long data to be migrated to a CLOB long컬럼을 clob으로 마이그레이션 하기 위한 테스트 데이터 입니다.
[예제2] LONG Type을 CLOB Type으로 바꾸어 Table 생성하는 방법
-- 새로운 테이블을 생성하면서 기존의 LONG Type의 데이터를 CLOB Type의 데이터로 변환합니다. SQL>CREATE TABLE clob_data AS SELECT c1, to_lob(c2) c2 FROM long_data; 테이블이 생성되었습니다.
-- 데이터를 확인해 보세요.. SQL> SELECT c2 FROM long_data;
[예제3] LONG RAW Type을 BLOB Type으로 바꾸어 Table 생성하는 방법
-- image_data테이블에 LONG RAW컬럼이 있다고 가정을 하면은 SQL> DESC image_data Name Null? Type ------------------------------- -------- ---- C1 NUMBER C2 LONG RAW
-- 아래의 예제와 같이 테이블을 생성하면서 쉽게 blob Type으로 변환 할 수 있습니다. SQL>CREATE TABLE blob_data AS SELECT c1, to_lob(c2) c2 FROM image_data;
================================================ * 오라클 정보공유 커뮤니티 oracleclub.com * http://www.oracleclub.com * http://www.oramaster.net * 운영자 : 김정식 (oramaster _at_ naver.com) ================================================ ※ oracleclub 강좌를 다른 홈페이지에 퍼가실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^