반응형
SMALL
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
public class POIUtil {
private POIUtil() {}
public static void writeToExcel(File filePath , String args[][] , String sheetName, short[] halign, short[] valign) throws IOException {
if(args == null) return;
FileOutputStream fileOut = null;
try {
HSSFWorkbook wb = new HSSFWorkbook();
// 워크북을 생성합니다. 엑셀파일을 만든다고 생각하시면 됩니다.
HSSFSheet sheet = wb.createSheet(sheetName);
// 생성된 엑셀에 시트를 생성합니다.
int rowsTotal = args.length;
for(int rowInx = 0 ; rowInx < rowsTotal ; rowInx++) {
HSSFRow row = sheet.getRow(rowInx);
//로우를 가져 옵니다. 로우는 그냥 엑셀의 한줄이라고 생각하시면 됩니다.
if(row == null) row = sheet.createRow(rowInx);
// 가져온 로우가 널일때는 로우를 생성합니다.
int colsTotal = args[rowInx].length;
for(int colInx = 0 ; colInx < colsTotal ; colInx++) {
HSSFCell cell = row.getCell(colInx);
//셀을 가져옵니다.
if(cell == null) cell = row.createCell(colInx);
// 가져온 셀이 널일 경우에 셀을 생성합니다.
HSSFCellStyle style = createCellStyle(wb);
// 셀의 스타일을 가져옵니다.
try {
style.setAlignment(halign[colInx]); //셀의 정열
style.setVerticalAlignment(valign[colInx]); //셀의 정열
} catch (Exception e) {
}
cell.setCellStyle(style);
cell.setCellValue(args[rowInx][colInx]); // 셀에 값을 설정합니다.
}
}
fileOut = new FileOutputStream(filePath);
//파일 출력하기 위한 아웃풋 파일 스크립을 엽니다.
wb.write(fileOut);
// 워크북(엑셀)에 작성된 문서를 일괄적으로 파일로 작성합니다.
} catch (FileNotFoundException e) {
e.printStackTrace();
throw e;
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
if(fileOut != null) fileOut.close();
}
}
public static HSSFCellStyle createCellStyle(HSSFWorkbook wb) {
HSSFCellStyle style = wb.createCellStyle();
//셀의 스타일을 설정합니다.
//셀의 테두리 설정과 색상을 설정합니다.
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBottomBorderColor(IndexedColors.BLUE.getIndex());
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setLeftBorderColor(IndexedColors.BLUE.getIndex());
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setRightBorderColor(IndexedColors.BLUE.getIndex());
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setTopBorderColor(IndexedColors.BLUE.getIndex());
return style;
}
public static void main(String[] args) {
File path = new File("d:\\testwrite.xls"); //출력할 엑셀의 파일명.
String[][] data = new String[][] { {"Data1" , "Data2" , "Object1"} , //출력할 엑셀의 데이터
{"Data1" , "Data2" , "Object2"} ,
{"Data1" , "Data2" , "Object3"} ,
{"Data1" , "Data2" , "Object3"} , };
String sheetName = "View1";
short[] halign = new short[] {
XSSFCellStyle.ALIGN_LEFT , XSSFCellStyle.ALIGN_CENTER , XSSFCellStyle.ALIGN_RIGHT
}; //정열
short[] valign = new short[] {
XSSFCellStyle.VERTICAL_TOP , XSSFCellStyle.VERTICAL_CENTER , XSSFCellStyle.VERTICAL_BOTTOM
}; //정열
try {
writeToExcel(path , data , sheetName , halign , valign);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
엑셀의 셀의 위치를 찾아 다니면서 , 개발하여야 하는 경우는 많은 하드 코딩이 필요하겠지만 , 그냥 데이터 전부를 덤프 뜨듯이 엑셀에다가 출력해야 하는 경우에는 아주 가볍게 쓰기에는 좋을 것 같습니다.
반응형
'Web Programing! > JAVA / JSP' 카테고리의 다른 글
[JSP] RSS 만들기 - 초보 (0) | 2011.09.17 |
---|---|
[JSP] javax.mail로 메일 전송시 한글 첨부파일명이 깨지는 경우 (0) | 2011.09.17 |
[JSP] jsp + 트위터 연동시 참고 사이트 (0) | 2011.09.17 |
[JSP] 파일 확장자 추출하기 (1) | 2011.09.14 |
[JSP] 8자리 랜덤문자 생성 코드 (0) | 2011.09.14 |
[JSP] request.getHeader() 메소드 (0) | 2011.09.14 |
[JSP] 자릿수 만들기 - DecimalFormat() (0) | 2011.09.14 |