본문 바로가기
Web Programing!/JAVA / JSP

[JSP] 포이<POI> 이용하여 엑셀 출력하기

by 어설픈봉봉이 2011. 9. 14.
반응형
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();
    }
  }
}


엑셀의 셀의 위치를 찾아 다니면서 , 개발하여야 하는 경우는 많은 하드 코딩이 필요하겠지만 , 그냥 데이터 전부를 덤프 뜨듯이 엑셀에다가 출력해야 하는 경우에는 아주 가볍게 쓰기에는 좋을 것 같습니다.



반응형