http://yanggoony.tistory.com/3
Jakarta POI
I. POI 란?
일반적으로 POI가 엑셀파일을 쓰는 컴퍼넌트로 알려져 있으나 POI는 프로젝트 이름입니다. 즉 POI는 Microsoft Format File을 액세스 할 수 있는 API를 제공합니다. (한마디로 자바에서 MS파일을 읽고 쓸수있도록 지원합니다.)
POI안에는 여러 컴퍼넌트들이 있습니다.
① POIFS Microsoft의 OLE2 포맷 형식의 문서를 자바로 읽고 쓸수 있는 컴퍼넌트입니다 기본적으로 POI의 모든 컴퍼넌트들이 POIFS를 사용합니다. ② HSSF Microsoft의 엑셀파일을 읽고 쓸수 있도록 지원하는 컴퍼넌트입니다. ③ HWPF Microsoft의 워드파일을 읽고 쓸수 있도록 지원하는 컴퍼넌트입니다. 이 컴퍼넌트는 디자인 초기단계입니다. ④ HPSF Microsoft의 OLE2 포맷 형식의 문서 속성을 어플리케이션에서 사용 할수 있도록 지원하는 컴퍼넌트입니다. 현재 읽기 기능만 제공합니다
워드파일을 핸들링 하는 HWPF는 초기단계라 사용을 못하지만 기대는 되는군요 ^^
ps. 영어사전을 찾아보니 poi는 하와이의 토란 요리를 뜻하더군요.
우리나라말로 하니 자카르타 토란 프로젝트 쯤 될라나? ㅎㅎ
II. 다운로드 및 설치
다운로드 받으러 갑시다~!
http://jakarta.apache.org/site/downloads/downloads_poi.cgi
현재 2.5.1버젼입니다.
다운받은 파일을 압축을 풀면 *.jar 파일들이 있을겁니다 이 파일들을 자신의 어플리케이션 /lib/에 복사합시다
POI API http://jakarta.apache.org/poi/apidocs/index.html
Quick Guide http://jakarta.apache.org/poi/hssf/quick-guide.html
III. Formula(수식) 지원에 관해..
엑셀을 읽고 쓸때 수식을 지원합니다. org.apache.poi.hssf.usermodel.HSSFCell의 setCellFormula("formulaString") 메쏘드는 스프레드시트에 수식을 추가하는데 사용되며 getCellFormula() 메쏘드는 수식을 대표하는 문자열을 해석하는데 사용됩니다. 하지만 엑셀에서 사용하는 수식을 모두 사용 할 수는 없습니다.
① 지원되는 부분 -. 셀 참조, 시트참조, 지역참조 -. 상대적 혹은 절대적 참조 -. 수연산 및 논리연산 -. 시트 혹은 매크로 함수
-. 수식 결과값 반환
② 부분적 지원 문자열을 포함하는 수식을 해석할 수는 있지만 문자열값을 반환하는 수식은 아직 지원하지 않습니다.③ 지원되지 않는 부분
-. 배열 수식 -. 1진법 수식 -. 3D 참조 -. 에러 값 (cells containing #REF's or #VALUE's)
IV. 기본객체
가장 기본이되는 객체가 다음 4가지 입니다
이름에서 무엇을 뜻하는지 대강 짐작 할 수 있겠죵?
① HSSFWorkbook - 엑셀 워크북을 말합니다.② HSSFSheet - 엑셀 쉬트를 나타냅니다.③ HSSFRow - 엑셀에서 특정 행입니다.④ HSSFCell - 엑셀에서 특정 행에대한 특정 셀입니다
위 4가지 객체는 앞으로 계속 나올겁니다. 눈여겨 미리 봐 둡시다. @.@
V. 엑셀 읽기 예제
① POSFS을 이용하여 엑셀 워크북을 생성합니다.
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("excelfile.xls")); HSSFWorkbook workbook = new HSSFWorkbook(fs);
② 생성된 워크북을 이용하여 시트 수만큼 돌면서 엑셀 시트 하나씩을 생성합니다.
int sheetNum = workbook.getNumberOfSheets();
for (int k = 0; k < sheetNum; k++) { System.out.println("Sheet Number : "+k);
System.out.println(Sheet Name : " + workbook.getSheetName(k)); HSSFSheet sheet = workbook.getSheetAt(k);
}
③ 생성된 시트를 이용하여 그 행의 수만큼 돌면서 행을 하나씩 생성합니다.
int rows = sheet.getPhysicalNumberOfRows();
for (int r = 0; r < rows; r++) { HSSFRow row = sheet.getRow(r);
System.out.println("Row : "+row.getRowNum());
}
④ 역시나 생성된 행을 이용하여 그 셀의 수만큼 돌면서 셀을 하나씩 생성합니다.
int cells = row.getPhysicalNumberOfCells();
for (short c = 0; c < cells; c++) { <--!! short 형입니다. 255개가 max! HSSFCell cell = row.getCell(c);
int celltype = cell.getCellType();
...
}
셀을 생성하여 셀 타입에 따라 처리를 해주면 끝~
⑤ 주의사항
만약 엑셀에서 A열에 아무런 값이 없으면 그 행은 읽지 못합니다.
행을 읽지 못하니 셀또한 처리 할 수 없습니다
VI. 엑셀읽기 샘플소스
샘플 데이터
A열은 B열에 대한 셀 타입을 나타내며 C열은 D열에대한 셀 타입을 나타냅니다.
즉 B:1 의 123456 의 셀 타입은 A:1 일반 이라는 것이며 마찬가지로
D:1의 2005-02-09 의 셀타입은 C:1 사용자정의 로 세팅하였다는 겁니다
이 엑셀의 데이터를 다음 소스로 읽어 보겠습니다.
<%@ page language="java" contentType="text/html;charset=euc-kr" import="java.io.*, org.apache.poi.poifs.filesystem.POIFSFileSystem, org.apache.poi.hssf.record.*, org.apache.poi.hssf.model.*, org.apache.poi.hssf.usermodel.*, org.apache.poi.hssf.util.*" %>
<html> <head><title>Read example</title></head> <body>
<%
String excelfile = "C:\\Tomcat 5.0\\webapps\\ROOT\\example.xls";
try { POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(excelfile));
//워크북을 생성!
HSSFWorkbook workbook = new HSSFWorkbook(fs);
int sheetNum = workbook.getNumberOfSheets();
for (int k = 0; k < sheetNum; k++) {
//시트 이름과 시트번호를 추출 %>
<br><br> Sheet Number <%= k %> <br> Sheet Name <%= workbook.getSheetName(k) %><br> <% HSSFSheet sheet = workbook.getSheetAt(k); int rows = sheet.getPhysicalNumberOfRows();
for (int r = 0; r < rows; r++) {
// 시트에 대한 행을 하나씩 추출 HSSFRow row = sheet.getRow(r); if (row != null) { int cells = row.getPhysicalNumberOfCells(); %> ROW <%= row.getRowNum() %> <%=cells%></b><br> <%
for (short c = 0; c < cells; c++) {
// 행에대한 셀을 하나씩 추출하여 셀 타입에 따라 처리 HSSFCell cell = row.getCell(c); if (cell != null) { String value = null;
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA : value = "FORMULA value=" + cell.getCellFormula(); break; case HSSFCell.CELL_TYPE_NUMERIC : value = "NUMERIC value=" + cell.getNumericCellValue(); //double break; case HSSFCell.CELL_TYPE_STRING : value = "STRING value=" + cell.getStringCellValue(); //String break; case HSSFCell.CELL_TYPE_BLANK : value = null; break; case HSSFCell.CELL_TYPE_BOOLEAN : value = "BOOLEAN value=" + cell.getBooleanCellValue(); //boolean break; case HSSFCell.CELL_TYPE_ERROR : value = "ERROR value=" + cell.getErrorCellValue(); // byte break; default : } %> <%= "CELL col=" + cell.getCellNum() + " VALUE=" + value %> <br> <% } } } } } } catch (Exception e) { %> Error occurred: <%= e.getMessage() %> <% e.printStackTrace(); }
%>
</body> </html>
위 소스의 결과입니다.
Sheet Number 0 Sheet Name 한글 ROW 0 4 CELL col=0 VALUE=STRING value=일반 CELL col=1 VALUE=NUMERIC value=123456.0 CELL col=2 VALUE=STRING value=사용자정의 CELL col=3 VALUE=NUMERIC value=38392.0 ROW 1 4 CELL col=0 VALUE=STRING value=숫자 CELL col=1 VALUE=NUMERIC value=123456.0 CELL col=2 VALUE=STRING value=날짜 (yy-m-d h:mm) CELL col=3 VALUE=NUMERIC value=38393.0 ROW 2 4 CELL col=0 VALUE=STRING value=통화 CELL col=1 VALUE=NUMERIC value=123456.0 CELL col=2 VALUE=STRING value=날짜 (yy年 mm月 dd日) CELL col=3 VALUE=NUMERIC value=38394.0 ROW 3 4 CELL col=0 VALUE=STRING value=텍스트 CELL col=1 VALUE=NUMERIC value=123456.0 CELL col=2 VALUE=STRING value=날짜 (yyyy년 mm월 dd일) CELL col=3 VALUE=NUMERIC value=38395.0
결과를 보니 사용자가 지정한 셀 타입에 관계없이
숫자관련 셀은 POI에서 모두 숫자 타입으로 인식해 버렸습니다.
날짜 역시 지정한 셀 타입에 관계없이 모두 숫자 타입으로 인식해 버리는군요!
그럼 어떻게 날짜를 제대로 표현할까요?
날짜 타입을 제대로 나타내기 위해서는 날짜 Cell에는 getDateCellValue()를 사용하면
정상적으로 처리 할 수 있습니다.
SimpleDateformat sdf = new SimpleDateformat("yyyy-MM-dd hh:mm"); String date = sdf.format(cell.getDateCellValue());
등을 이용하면 나타내고자 하는 알짜를 표현 하기 더 쉽겠지요
나머지 수식을 가져 올때도 마찬가지입니다. 이런 사항을 도표로 나타내보았습니다.
org.apache.poi.hssf.usermodel.HSSFCell 에는 모두 6가지의 Cell Type이 있는데,
cell.getCellType()을 하면 그 셀의 반환값을 알 수 있으며 그에 상응하는 static 필드타입은 다음과 같습니다.
셀타입
필드타입
함수
함수반환값
0
CELL_TYPE_NUMERIC
getNumericCellValue()
-> 숫자 타입일때
getDateCellValue()
-> 날짜 타입일때
double
Date
1
CELL_TYPE_STRING
getStringCellValue()
String
2
CELL_TYPE_FORMULA
getCellFormula()
-> 수식자체를 가져올때
getNumericCellValue()
-> 수식 반환값이 숫자일때
getStringCellValue()
-> 수식 반환값이 문자일때
String
double
String
3
CELL_TYPE_BLANK
4
CELL_TYPE_BOOLEAN
getBooleanCellValue()
boolean
5
CELL_TYPE_ERROR
getErrorCellvalue()
byte
이번시간에는 POI 프로젝트를 이용하여 엑셀 파일을 읽어보았습니다.
다음 시간에는 엑셀파일에 쓰는 핸드링을 해 보도록 하지요~
네이버
Jakarta POI 2탄 쓰기편 | JAVA
2005/03/14 13:26
http://blog.naver.com/levin01/100011050010
Jakarta POI
VII. 엑셀 쓰기예제
쓰기도 역시 읽기와 비슷합니다.
① 엑셀 워크북을 생성합니다. 행과 셀을 생성하려면 당연한 절차겠죠?
HSSFWorkbook workbook = new HSSFWorkbook();
② 시트를 생성합니다.
시트명을 파라미터로 바로 생성 합니다.
HSSFSheet sheet = workbook.createSheet("sheet name");
만약 한글로 시트명을 만들려면 다음과 같이 인코딩이 필요합니다.
HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName( 0 , "한글" , HSSFWorkbook.ENCODING_UTF_16 );
③ 셀에 사용할 스타일을 미리 생성해 둡니다.
HSSFCellStyle style = wb.createCellStyle(); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBottomBorderColor(HSSFColor.BLACK.index); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setLeftBorderColor(HSSFColor.GREEN.index); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setRightBorderColor(HSSFColor.BLUE.index); style.setBorderTop(HSSFCellStyle.BORDER_MEDIUM_DASHED); style.setTopBorderColor(HSSFColor.BLACK.index);
등 여러가지 스타일을 만들 수 있습니다.
스타일은 다음 주소를 참고하세요
http://jakarta.apache.org/poi/apidocs/org/apache/poi/hssf/usermodel/HSSFCellStyle.html
④ 로우를 하나 생성합니다.
HSSFRow row = sheet.createRow(0);
⑤ 셀츨 하나 생성하여 스타일을 주고 값을 입력합니다.
HSSFCell cell = row.createCell((short)0);
cell.setCellStyle(style);
cell.setCellValue("jakarta project!");
만약 한글을 입력한다면 인코딩 해야 하며 값 세팅전에 해야 합니다.
cell.setEncoding(HSSFCell.ENCODING_UTF_16); //한글 처리
cell.setCellStyle(style);
cell.setCellValue("자카드타 프로젝트!");
⑥ 모든 셀이 다 입력되었으면 파일을 만듭니다.
FileOutputStream fs = new FileOutputStream("excelfile.xls"); workbook.write(fs); fs.close();
VIII. 쓰기샘플 소스
<%@ page language="java" contentType="text/html;charset=euc-kr" %> <%@ page import="java.io.*" %> <%@ page import="org.apache.poi.poifs.dev.*" %> <%@ page import="org.apache.poi.hssf.record.*" %> <%@ page import="org.apache.poi.hssf.record.formula.*" %> <%@ page import="org.apache.poi.hssf.model.*" %> <%@ page import="org.apache.poi.hssf.usermodel.*" %> <%@ page import="org.apache.poi.hssf.util.*" %>
<html> <body>
<% String filepath = "C:\\Tomcat 5.0\\webapps\\ROOT\\write.xls";
try {
String[] cell_value = {"자카르타","프로젝트","http://www.jakartaproject.com/ "};
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(); workbook.setSheetName(0 , "한글명" ,HSSFWorkbook.ENCODING_UTF_16 );
HSSFCellStyle style = workbook.createCellStyle(); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBottomBorderColor(HSSFColor.BLACK.index); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setLeftBorderColor(HSSFColor.GREEN.index); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setRightBorderColor(HSSFColor.BLUE.index); style.setBorderTop(HSSFCellStyle.BORDER_MEDIUM_DASHED); style.setTopBorderColor(HSSFColor.BLACK.index);
HSSFRow row = sheet.createRow(0); for (int i = 0 ; i < cell_value.length; i++){ HSSFCell cell = row.createCell((short)i); cell.setEncoding(HSSFCell.ENCODING_UTF_16 ); cell.setCellStyle(style); cell.setCellValue(cell_value[i]); } FileOutputStream fs = null; try { fs = new FileOutputStream(filepath); workbook.write(fs); } catch (Exception e) { } finally { if (fs != null) fs.close(); } } catch (Exception e) { %> Error occurred: <%= e.getMessage() %> <% e.printStackTrace(); } %>
</body> </html>
자 결과화면 입니다.
성공!
위의 소스를 기본으로 한다면 그리 어렵지 않을겁니다 ^^
참고로 셀병합은
HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); HSSFRow row = sheet.createRow((short) 1); HSSFCell cell = row.createCell((short) 1); cell.setCellValue("This is a test of merging"); //셀병합 //Region(int 시작row, short 시작col, int 종료row, short 종료col) sheet.addMergedRegion(new Region(1,(short)1,1,(short)2)); FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 와 같이하면 됩니다
네이버
Jakarta POI III탄 Cell편 | JAVA2
2005/04/19 08:51
http://blog.naver.com/levin01/100012095949
Jakarta POI
IX. Cell을 좀더 유연하게!
1. Date타입 셀 만들기
① 소스
HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet");
HSSFRow row = sheet.createRow((short)0);
//처음셀은 style없이 그냥 new Date()로 입력
HSSFCell cell = row.createCell((short)0); cell.setCellValue(new Date());
//두번째 셀은 "m/d/yy h:mm"으로 포맷하여 날짜를 입력
HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm") ); cell = row.createCell((short)1); cell.setCellValue(new Date()); cell.setCellStyle(cellStyle);
FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close();
② 결과
③ HSSFDateFormat이 지원하는 날짜 포맷
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")); 에서 다음과 같이 포맷을 정할 수 있다 (현재시간은 2005년 3월 14일 0시 52분 17초.. 헛 화이트데이 --;)
2. Cell의 Align속성
① 소스
HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); HSSFRow row = sheet.createRow((short) 2);
//HSSFCellStyle의 여러가지 align속성 createCell(wb, row, (short) 0, HSSFCellStyle.ALIGN_CENTER ); createCell(wb, row, (short) 1, HSSFCellStyle.ALIGN_CENTER_SELECTION ); createCell(wb, row, (short) 2, HSSFCellStyle.ALIGN_FILL ); createCell(wb, row, (short) 3, HSSFCellStyle.ALIGN_GENERAL ); createCell(wb, row, (short) 4, HSSFCellStyle.ALIGN_JUSTIFY ); createCell(wb, row, (short) 5, HSSFCellStyle.ALIGN_LEFT ); createCell(wb, row, (short) 6, HSSFCellStyle.ALIGN_RIGHT ); FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close();
public void createCell(HSSFWorkbook wb, HSSFRow row, short column, short align) { HSSFCell cell = row.createCell(column); cell.setCellValue("Align It"); HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(align); cell.setCellStyle(cellStyle); }
② 결과
3. Cell의 Border 속성
① 소스
HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); HSSFRow row = sheet.createRow((short) 1); HSSFCell cell = row.createCell((short) 1); cell.setCellValue(4); // Cell의 Border 속성 HSSFCellStyle style = wb.createCellStyle(); style.setBorderBottom(HSSFCellStyle.BORDER_THIN ); style.setBottomBorderColor(HSSFColor.BLACK.index ); style.setBorderLeft(HSSFCellStyle.BORDER_THIN ); style.setLeftBorderColor(HSSFColor.GREEN.index ); style.setBorderRight(HSSFCellStyle.BORDER_THIN ); style.setRightBorderColor(HSSFColor.BLUE.index ); style.setBorderTop(HSSFCellStyle.BORDER_MEDIUM_DASHED ); style.setTopBorderColor(HSSFColor.BLACK.index ); cell.setCellStyle(style); FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close();
② 결과
③ HSSFCellStyle
HSSFCellStyle에는 다음과 같은 static 멤버변수가 존재합니다
ALIGN_CENTER
center horizontal alignment
ALIGN_CENTER_SELECTION
center-selection? horizontal alignment
ALIGN_FILL
fill? horizontal alignment
ALIGN_GENERAL
general (normal) horizontal alignment
ALIGN_JUSTIFY
justified horizontal alignment
ALIGN_LEFT
left-justified horizontal alignment
ALIGN_RIGHT
right-justified horizontal alignment
ALT_BARS
Wide dots
BIG_SPOTS
Large spots
BORDER_DASH_DOT
dash-dot border
BORDER_DASH_DOT_DOT
dash-dot-dot border
BORDER_DASHED
dash border
BORDER_DOTTED
hair-line border
BORDER_DOUBLE
double-line border
BORDER_HAIR
dot border
BORDER_MEDIUM
Medium border
BORDER_MEDIUM_DASH_DOT
medium dash-dot border
BORDER_MEDIUM_DASH_DOT_DOT
medium dash-dot-dot border
BORDER_MEDIUM_DASHED
Medium dashed border
BORDER_NONE
No border
BORDER_SLANTED_DASH_DOT
slanted dash-dot border
BORDER_THICK
Thick border
BORDER_THIN
Thin border
BRICKS
Brick-like layout
DIAMONDS
Diamonds
FINE_DOTS
Small fine dots
NO_FILL
No background
SOLID_FOREGROUND
Solidly filled
SPARSE_DOTS
Sparse dots
SQUARES
Squares
THICK_BACKWARD_DIAG
Thick backward facing diagonals
THICK_FORWARD_DIAG
Thick forward facing diagonals
THICK_HORZ_BANDS
Thick horizontal bands
THICK_VERT_BANDS
Thick vertical bands
THIN_BACKWARD_DIAG
Thin backward diagonal
THIN_FORWARD_DIAG
Thin forward diagonal
THIN_HORZ_BANDS
Thin horizontal bands
THIN_VERT_BANDS
Thin vertical bands
VERTICAL_BOTTOM
bottom-aligned vertical alignment
VERTICAL_CENTER
center-aligned vertical alignment
VERTICAL_JUSTIFY
vertically justified vertical alignment
VERTICAL_TOP
top-aligned vertical alignment
4. Cell의 색갈 채우기
① 소스
HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet");
HSSFRow row = sheet.createRow((short) 1);
HSSFCellStyle style = wb.createCellStyle(); // 아쿠아색을 배경으로 하고
style.setFillBackgroundColor(HSSFColor.AQUA.index);
//채움 스타일은 큰 점으로 한다style.setFillPattern(HSSFCellStyle.BIG_SPOTS); HSSFCell cell = row.createCell((short) 1); cell.setCellValue("X"); cell.setCellStyle(style);
style = wb.createCellStyle();
// 오렌지색으로 전경으로 하고style.setFillForegroundColor(HSSFColor.ORANGE.index);
// 채움 스타일은 SOLID_FOREGROUND로 한다style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); cell = row.createCell((short) 2); cell.setCellValue("X"); cell.setCellStyle(style);
FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close();
② 결과
③ HSSFColor 정리!
5. Cell 병합
① 소스
HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet");
HSSFRow row = sheet.createRow((short) 1); HSSFCell cell = row.createCell((short) 1);
cell.setCellValue("This is a test of merging");
sheet.addMergedRegion(new Region(1,(short)1,1,(short)2));
FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close();
② 결과
③ Region
특정셀을 합칠 때는 HSSFSheet의 addMergedRegion(Region region)와
합칠 셀의 영역을 나타내는 Region을 사용한다.
Region region = new (int 시작ROW, short 시작COL, int 종료ROW, short 종료COL);
6. Cell에 폰트 설정하기
① 소스
HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet");
HSSFRow row = sheet.createRow((short) 1);
// 폰트 높이는 24, 폰트 종류는 Courier New, 이탈릭체로 설정한다HSSFFont font = wb.createFont(); font.setFontHeightInPoints ((short)24); font.setFontName ("Courier New"); font.setItalic (true); font.setStrikeout (true);
// 설정한 폰트를 스타일에 적용한다 HSSFCellStyle style = wb.createCellStyle();style.setFont(font);
// Cell에 스타일을 적용한다 HSSFCell cell = row.createCell((short) 1); cell.setCellValue("This is a test of fonts"); cell.setCellStyle(style);
FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close();
② 결과
=============================================
본문서는 자유롭게 배포/복사 할수 있지만
이문서의 저자에 대한 언급을 삭제하시면 안됩니다
저자 : GoodBug (unicorn@jakartaproject.com )
최초 : http://www.jakartaproject.com
=============================================
네이버
Jakarta POI IV탄 이미지편 | JAVA2
2005/09/13 15:29
http://blog.naver.com/levin01/100017355281
Jakarta POI
X. 이미지
민군 : 유니콘홈피에서 퍼왔습니다
허락없이 퍼온점 죄송하게 생각하고 저작권이 문제될경우 즉시삭제하겠습니다
보시는분들 주의해주시길 부탁드립니다
POI 3.0 부터 드디어 이미지를 지원하는군요.
아직 알파버젼이구요 http://www.apache.org/dyn/closer.cgi/jakarta/poi/ 에서 최신버젼을 다운 받을 수 있습니다
최신링크
http://mirror.apache.or.kr/jakarta/poi/dev/bin/poi-bin-3.0-alpha1-20050704.zip
아래 소스는 OKJSP의 "이루"님이 작성한 소스입니다
from http://www.okjsp.pe.kr/bbs?act=VIEW&seq=60543&bbs=bbs4&keyfield=content&keyword=&pg=0
import java.util.*; import java.io.*;
import org.apache.poi.hssf.usermodel.*; import org.apache.poi.poifs.filesystem.*; import org.apache.poi.poifs.filesystem.POIFSFileSystem.*; import org.apache.poi.poifs.eventfilesystem.*;
public class InsertImage { public static void main(String[] args) throws IOException { POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("/xxx/test.xls")); // 원본엑셀파일 HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFSheet sheet = wb.getSheetAt(0);
drawSheet5( sheet, wb );
// Write the file out. FileOutputStream fileOut = new FileOutputStream("/xxx/img_work.xls"); // 이미지 삽입된 엑셀파일 wb.write(fileOut); fileOut.close(); }
private static void drawSheet5 ( HSSFSheet sheet, HSSFWorkbook wb ) throws IOException { // Create the drawing patriarch. This is the top level container for // all shapes. This will clear out any existing shapes for that sheet. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
HSSFClientAnchor anchor; anchor = new HSSFClientAnchor(0,0,0,255,(short)1,4,(short)2,4); // 이미지 크기조절은 여기서.. anchor.setAnchorType( 2 ); patriarch.createPicture(anchor, loadPicture( "/xxx/okjsp.jpg", wb )); // 삽입 할 이미지 }
private static int loadPicture ( String path, HSSFWorkbook wb ) throws IOException { int pictureIndex; FileInputStream fis = null; ByteArrayOutputStream bos = null;
try { fis = new FileInputStream( path); bos = new ByteArrayOutputStream( ); int c; while ( (c = fis.read()) != -1) { bos.write( c ); } pictureIndex = wb.addPicture( bos.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG ); } finally { if (fis != null) fis.close(); if (bos != null) bos.close(); } return pictureIndex; } }
출처 : Tong - 반이오타님의 JAVA Programing통