저번 시간에는 엑셀 파일 쓰기에 대해서 해봤습니다.

저번시간 내용은 아래와 같습니다.

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


이번에는 엑셀파일을 읽어 보도록 하겠습니다.

양식이 들어가면 좀 복잡해지지만

단순하게 읽고 쓰는건 어렵진 않습니다.


저번 시간에 엑셀 파일을 만들어놓은 것을 읽어오는 샘플입니다.

[샘플소스]

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.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
 
public class ExcelReadSample {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		ExcelReadSample sample = new ExcelReadSample();
 
		try {
			sample.excelRead(new File("D:\\ExcelWriteSample.xls"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 
	/**
	 * 
	 * @param file
	 * @throws IOException
	 */
	public void excelRead(File file) throws IOException {
 
		// map의 key정의
		String[] keys = { "name", "addr", "tel", "etc" };
 
		Workbook w = null;
		try {
			w = Workbook.getWorkbook(file);
			// 첫번째 엑셀 시트를 가져옴.
			Sheet sheet = w.getSheet(0);
 
			// 읽어들인 데이터를 저장
			List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
 
			// 한 행을 저장
			Map<String, Object> map = null;
 
			// 시트의 행 사이즈 만큼 읽어옴.
			for (int j = 0; j < sheet.getRows(); j++) {
 
				map = new HashMap<String, Object>();
 
				// 열 사이즈 만큼 읽어옴.
				for (int i = 0; i < sheet.getColumns(); i++) {
					// 한 셀을 읽어옴.
					Cell cell = sheet.getCell(i, j);
 
					// 셀타입
					CellType type = cell.getType();
 
					// 셀타입이 문자열
					if (type == CellType.LABEL) {
						System.out.println("문자열 입니다. "
								+ cell.getContents());
					}
 
					// 셀타입이 숫자
					if (type == CellType.NUMBER) {
						System.out.println("숫자 입니다. "
								+ cell.getContents());
					}
 
					// 한개의 셀 데이터
					map.put(keys[i], cell.getContents());
				}
 
				data.add(map);
			}
 
			// 읽어 들인  데이터 출력
			for (Map<String, Object> temp : data) {
				System.out.println(temp);
			}
		} catch (BiffException e) {
			e.printStackTrace();
		}
	}
 
}


cell.getType()이라는 것으로 셀의 형식이 문자열인지 숫자인지, 또는 날짜형식인지 등등 을 알수 있습니다.

저는 엑셀파일을 만들때 문자열로만 만들었기 때문에 굳이 비교를 하지 않아도 되지만  샘플로 이런 것도 있다는 걸

보여주기 위해 한번 넣어 봤습니다.


숫자 형식으로 쓸려면 엑셀파일을 만들때 아래와 같은 형식으로 만들면 엑셀에서 숫자로 인식합니다.

jxl.write.Number num = new jxl.write.Number(열, 행, 숫자값);


[실행결과]

excelRead.jpg



원래는 파일 쓰기 할때 여러가지 설명을 했어야 하는데.... 급하게 만드느라 설명이 별로 없었습니다.

다음 시간에 좀더 양식을 갖춘 엑셀파일 만들어 보도록 하겠습니다.


감사합니다.




[튜토리얼]http://www.andykhan.com/jexcelapi/tutorial.html