저번저번 시간에 [Java]Execl파일 만들기를 했었는데 거기에 좀더 보태서 많이는 아니지만

좀 양식을 더해서 엑셀파일을 만들어 보도록 하겠습니다.


1탄은 아래의 URL을 참조

[Java]Execl파일 만들기 : http://forum.falinux.com/zbxe/?document_srl=575169


아래의 왼쪽그림은 엑셀 파일을 단순히 출력만 했던걸 오른쪽의 처럼 컬럼와 크기를 설정해 출력하도록 해보겠습니다.

excelSample.jpg



[샘플소스]

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.Font;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
 
public class ExcelWriteSample {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		ExcelWriteSample sample = new ExcelWriteSample();
		 try {
		 sample.excelWrite(new File("D:\\ExcelWriteSample.xls"),
		 sample.getData());
		 } catch (WriteException e) {
		 // TODO Auto-generated catch block
		 e.printStackTrace();
		 } catch (IOException e) {
		 // TODO Auto-generated catch block
		 e.printStackTrace();
		 }
	}
 
	/**
	 * 
	 * @param file
	 * @param data
	 * @throws IOException
	 * @throws WriteException
	 */
	public void excelWrite(File file, List<Map<String, Object>> data)
			throws IOException, WriteException {
 
		// WorkBook 생성
		WritableWorkbook wb = Workbook.createWorkbook(file);
 
		// WorkSheet 생성
		WritableSheet sh = wb.createSheet("테스트", 0);
		// 열넓이 설정 (열 위치, 넓이)
		sh.setColumnView(0, 10);
		sh.setColumnView(1, 20);
		sh.setColumnView(2, 20);
		sh.setColumnView(3, 20);
 
		// 폰트 포맷
		WritableFont arial20font = new WritableFont(WritableFont.ARIAL, // 폰트이름
				20, // 폰트 크기
				WritableFont.BOLD, // 폰트 두께
				false, // 이탤릭 사용 유무
				UnderlineStyle.DOUBLE, // 밑줄 스타일
				Colour.BLACK);  // 폰트색
 
		// 제목 형식
		WritableCellFormat titleFormat = new WritableCellFormat(arial20font);
		// 제목 좌우 정렬
		titleFormat.setAlignment(Alignment.CENTRE);
		// 제목 상하 정렬
		titleFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
 
		// 셀 병합
		// 제목 셀 병합
//		sh.mergeCells(col1, row1, col2, row2)
		sh.mergeCells(0, 0, 3, 0);
		// 제목 행 높이
		sh.setRowView(0, 800);
 
		// 폰트 포맷
		WritableFont heard14font = new WritableFont(WritableFont.ARIAL, // 폰트이름
				14, // 폰트 크기
				WritableFont.BOLD, // 폰트 두께
				false, // 이탤릭 사용 유무
				UnderlineStyle.NO_UNDERLINE, // 밑줄 스타일
				Colour.BLACK);  // 폰트색
 
		// 헤더 형식
		WritableCellFormat headFormat = new WritableCellFormat(heard14font);
		// 헤더 좌우 정렬
		headFormat.setAlignment(Alignment.CENTRE);
		// 헤더 상하 정렬
		headFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
		// 헤더 테두리
		headFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
		// 백그라운드 색
		headFormat.setBackground(jxl.format.Colour.GRAY_25);
 
 
		// 셀형식
		WritableCellFormat textFormat = new WritableCellFormat();
		// 셀 좌우 정렬
		textFormat.setAlignment(Alignment.CENTRE);
		// 셀 상하 정렬
		textFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
		// 테두리
		textFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
 
		int titleRow = 0;
		int row = 1;
 
 
		// 헤더
		sh.setRowView(row, 350);
		Label label = new jxl.write.Label(0, titleRow, "주  소  록", titleFormat);
		sh.addCell(label);
 
		label = new jxl.write.Label(0, row, "이름", headFormat);
		sh.addCell(label);
 
		label = new jxl.write.Label(1, row, "주소", headFormat);
		sh.addCell(label);
 
		label = new jxl.write.Label(2, row, "전화번호", headFormat);
		sh.addCell(label);
 
		label = new jxl.write.Label(3, row, "비고", headFormat);
		sh.addCell(label);
 
		row++;
 
		for (Map<String, Object> tem : data) {
 
			// 행 높이
			sh.setRowView(row, 300);
 
			// 이름
			label = new jxl.write.Label(0, row, (String) tem.get("name"),
					textFormat);
			sh.addCell(label);
			// 주소
			label = new jxl.write.Label(1, row, (String) tem.get("addr"),
					textFormat);
			sh.addCell(label);
			// 전화번호
			label = new jxl.write.Label(2, row, (String) tem.get("tel"),
					textFormat);
			sh.addCell(label);
			// 비고
			label = new jxl.write.Label(3, row, (String) tem.get("etc"),
					textFormat);
			sh.addCell(label);
 
			row++;
		}
 
		// WorkSheet 쓰기
		wb.write();
 
		// WorkSheet 닫기
		wb.close();
 
	}
 
	/**
	 * 출력할 데이터
	 * 
	 * @return
	 */
	public List<Map<String, Object>> getData() {
 
		List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
 
		Map<String, Object> map = new HashMap<String, Object>();
 
		map.put("name", "이기자");
		map.put("addr", "서울시 강북");
		map.put("tel", "010-XXXX-XXXX");
		map.put("etc", "");
 
		data.add(map);
 
		map = new HashMap<String, Object>();
		map.put("name", "김철순");
		map.put("addr", "서울시 강남");
		map.put("tel", "010-XXXX-XXXX");
		map.put("etc", "");
 
		data.add(map);
 
		map = new HashMap<String, Object>();
		map.put("name", "박순심");
		map.put("addr", "서울시 서초");
		map.put("tel", "010-XXXX-XXXX");
		map.put("etc", "");
 
		data.add(map);
 
		map = new HashMap<String, Object>();
		map.put("name", "강기남");
		map.put("addr", "서울시 송파");
		map.put("tel", "010-XXXX-XXXX");
		map.put("etc", "");
 
		data.add(map);
 
		return data;
 
	}
}


커맨트에 대부분 설명이 달려 있기때문에 커맨트를 참조하세요.

폰트는 WritableFont.ARIAL와 WritableFont.TAHOMA, WritableFont.TIMES만 있는것 같습니다.

그외는 없기때문에 지원을 안하는것 같습니다.


소스 내용이 그렇게 어렵지 않으니 소스내용을 이해하면 쉽게 활용 할 수 있을꺼라 혼자 생각해봅니다. ^^;

감사합니다.