[POI] 엑셀 생성 및 다운로드

2015. 6. 25. 10:05카테고리 없음

public static void main(String[] args){

  OutputStream fileOut = null;
  
  /** 헤더 설정 */
  response.setHeader("Content-Disposition", "attachment; filename=excelTotalResult.xls");

  
  List<HashMap> resultList = 리스트 추출;
  
  HSSFWorkbook workbook = getWorkbook(resultList); // workbook 생성
  
  HSSFSheet sheet = workbook.createSheet("사원현황");

  HSSFRow row;
  HSSFCell cell;
  
  /** STYLE START */
  
  HSSFCellStyle titleStyle = workbook.createCellStyle();
  HSSFCellStyle cellStyle = workbook.createCellStyle();
  HSSFCellStyle contentStyle = workbook.createCellStyle();
  HSSFCellStyle contentStyle_2 = workbook.createCellStyle();
  
  /** 폰트 설정*/
  // 타이틀 폰트
  HSSFFont titleFont = workbook.createFont();
  
  titleFont.setFontHeightInPoints((short)13);
  titleFont.setFontName("맑은 고딕");
  
  // 컬럼명 폰트
  HSSFFont colNameFont = workbook.createFont();
  
  colNameFont.setFontHeightInPoints((short)10);
  colNameFont.setFontName("맑은 고딕");
  
  // 내용 폰트
  HSSFFont contentFont = workbook.createFont();
  
  /** 타이틀 폰트 스타일 지정 */
  titleStyle.setFont(titleFont);
  
  /** 컬럼 셀 테두리 / 폰트 스타일 지정 */
  cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); // 셀 색상
  cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);              //테두리 설정   
  cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);   
  cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); 
  cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
  cellStyle.setFont(colNameFont);
  
  /** 내용 셀 테두리 / 폰트 지정 */
  contentStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);              //테두리 설정   
  contentStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);   
  contentStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); 
  contentStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  contentStyle.setFont(contentFont);
  
  /** 내용 셀 테두리 / 폰트 지정 왼쪽정렬*/
  contentStyle_2.setBorderRight(HSSFCellStyle.BORDER_THIN);              //테두리 설정   
  contentStyle_2.setBorderLeft(HSSFCellStyle.BORDER_THIN);   
  contentStyle_2.setBorderTop(HSSFCellStyle.BORDER_THIN); 
  contentStyle_2.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
  contentStyle_2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  contentStyle_2.setAlignment(HSSFCellStyle.ALIGN_LEFT);
  contentStyle_2.setFont(contentFont);

  /** STYLE END */

  //생성한 workbook 엑셀생성 / 스타일 적용
  int sheet_row = 0;
  
  for(int i = 0 ; i <= workbook.getSheetAt(0).getLastRowNum() ; i++, sheet_row++){
      
   row = sheet.createRow(i);
    
   for(int j = 0 ; j < workbook.getSheetAt(0).getRow(i).getLastCellNum() ; j++){
     
    cell = row.createCell(j);
     
      if(i == 0){
      
       cell = row.createCell(j);
       cell.setCellStyle(titleStyle);
      
      }else if(i == 2){
      
       cell = row.createCell(j);
       cell.setCellStyle(cellStyle);
      
      }else{
      
       cell.setCellStyle(contentStyle);
      
      }

      // 셀 사이즈 자동 조절
      sheet.autoSizeColumn((short)j);
      
      sheet.setColumnWidth(j, (sheet.getColumnWidth(j))+512 );
     
      // 데이터복사
      cell.setCellValue(workbook.getSheetAt(0).getRow(i).getCell(j).toString());
     
   }
    
  }

 

  /** 출력 */
  fileOut = response.getOutputStream();
  workbook.write(fileOut);
  fileOut.close();

 }

 public static HSSFWorkbook getWorkbook(List list) throws Exception {

  HSSFWorkbook workbook = new HSSFWorkbook();

  // 헤더 배열
  String[] header = { "번호", "이름", "사번" }; // 헤더
  String[] column = { "name", "emp_num" }; // 컬럼명
  workbook = PoiUtil.createWorkBook("사원 현황", "1. 사원명단", header, column, list); // 엑셀생성

  return workbook;
 }

 /**
  * POI WORK 생성 Parameter : String 시트명, String 제목, String []헤더 , String[]
  * 헤더명, 리스트
  */

 public static HSSFWorkbook createWorkBook(String sheetName, String title, String[] header, String[] colName, List resultList) {

  HSSFRow row;
  HSSFCell cell;

  /** 엑셀 파일 생성 START */
  HSSFWorkbook workbook = new HSSFWorkbook();

  /** 시트 생성 */
  HSSFSheet sheet = workbook.createSheet(sheetName);

  // 행 인덱스
  int sheet1_row = 0;

  /** 제목 */
  row = sheet.createRow(sheet1_row);
  cell = row.createCell(0);
  cell.setCellValue(title);
  sheet1_row++;

  // 공백
  row = sheet.createRow(sheet1_row);
  sheet1_row++;

  /** 헤더 START */
  row = sheet.createRow(sheet1_row);
  for (int i = 0; i < header.length; i++) {

   cell = row.createCell(i);
   cell.setCellValue(header[i]);

  }
  sheet1_row++;

  /** 헤더 END */
  for (int i = 0; i < resultList.size(); i++) {

   HashMap map = (HashMap) resultList.get(i);

   row = sheet.createRow(sheet1_row);

   /** 번호 */
   cell = row.createCell(0);
   cell.setCellValue(String.valueOf(i + 1));

   for (int j = 0; j < colName.length; j++) {

    cell = row.createCell(j + 1);
    if (null != map.get(colName[j])) {

     cell.setCellValue(map.get(colName[j]).toString());

    } else {

     cell.setCellValue("");

    }
   }

   sheet1_row++;
  }

  return workbook;

 }