Java 는 템 플 릿 에 따라 Excel 보고 서 를 내 보 내 고 템 플 릿 을 복사 하여 여러 개의 Sheet 페이지 를 생 성 합 니 다.

13076 단어 자바도 출excel
최근 에 보고서 로 내 보 내 는 것 이 많 기 때문에 모든 것 이 도구 류 로 추출 되 었 습 니 다.이 도구 류 에서 사용 하 는 장면 은?  제 공 된 템 플 릿 에 따라 엑셀 보고 서 를 내 보 냅 니 다.
또한 제 공 된 템 플 릿 Sheet 페이지 에 따라 복사 하여 여러 Sheet 페이지 의 수 요 를 실현 할 수 있 습 니 다.
이 도구 클래스 를 사용 할 때 필요 한 것 이 모든 Sheet 페이지 의 데이터 가 일치 하지 않 지만 표 스타일 과 템 플 릿 이 같 습 니 다.
그러면 실제 상황 에서 sql 에 따라 추가 할 데이터 원본 을 조회 해 야 합 니 다(데이터 원본 만 변경 하면 됩 니 다)
사용 하 는 기술 은 POI 내 보 내기 입 니 다.클래스 때문에 현재 2003 버 전의 Excel 만 지원 합 니 다.
사용 하기 전에 해당 jar 가방 을 다운로드 하 세 요!
후기 에 시간 이 있 으 면 계속 보완 할 것 입 니 다.첫 번 째 도구 류 는 완선 되 지 않 은 부분 이 있 으 면 양해 해 주 십시오!
먼저 템 플 릿 스타일 과 실행 결 과 를 보고 코드 를 바로 올 립 니 다.
엑셀 템 플 릿 스타일 입 니 다.

내 보 내기 결과 입 니 다.

구체 적 실현 데모 보기

package com.sgcc.xyz.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
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.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.Region;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import com.sgcc.uap.persistence.impl.HibernateDaoImpl;
/**
 *        
 * 
 * @author JYLiu 
 @     
       POI Excel2003                  Excel   
 *            Sheet            Sheet    
 *         ,       Sheet         ,            
 *                sql            (         )
 */
public class ExcelUtil {
 /**
  *         ,     Sheet 
  * 
  * @param    Excel   
  * @param      (   )
  * @param    
  * @param     
  * @param    Sheet      
  * @param     Map   key  (key    value          )
  * @param              (          )
  */
 public static void ExcelByModel(String ExcelName, String ModelURl, List<Map<String, String>> dataSource, 
   HttpServletResponse response, String[] sheetNames, String[] keyNames, int rowNum) throws Exception {
  //     Excel       
  response.setContentType("application/vnd.ms-excel");
  //     Excel        
  String fileName = new String(ExcelName.getBytes("utf-8"), "ISO-8859-1");
  response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");
  //        
  OutputStream fileOut = response.getOutputStream();
  //         
  File file = new File(ModelURl);
  FileInputStream fins = new FileInputStream(file);
  POIFSFileSystem fs = new POIFSFileSystem(fins);
  //   Excel  
  HSSFWorkbook wb = new HSSFWorkbook(fs);
  //       
  HSSFCellStyle style = wb.createCellStyle();
  style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  style.setBorderRight(HSSFCellStyle.BORDER_THIN);
  style.setBorderTop(HSSFCellStyle.BORDER_THIN);
  //          
  style.setBottomBorderColor(HSSFColor.BLACK.index);
  style.setLeftBorderColor(HSSFColor.BLACK.index);
  style.setRightBorderColor(HSSFColor.BLACK.index);
  style.setTopBorderColor(HSSFColor.BLACK.index);
  //    
  HSSFSheet sheetModel = null;
  //    Sheet 
  HSSFSheet newSheet = null;
  //    
  HSSFRow row = null;
  //    
  HSSFCell cell = null;
  //     Sheet 
  for (int i = 0; i < sheetNames.length; i++) {
   //        Sheet     
   sheetModel = wb.getSheetAt(0);
   //     Sheet   
   newSheet = wb.createSheet(sheetNames[i]);
   //              Sheet  
   copySheet(wb, sheetModel, newSheet, sheetModel.getFirstRowNum(), sheetModel.getLastRowNum());
   //     Sheet             
   row=newSheet.getRow(0);
   row.getCell(1).setCellValue("         ");
   //                     
   row.getCell(6).setCellValue("          ");
   //         ,   
   row=newSheet.getRow(1);
   row.getCell(1).setCellValue("     ");
   //                     
   row.getCell(6).setCellValue("           ");
   //             (  Excel   0  ,    )
   int num = rowNum - 1;
   for (Map<String, String> item : dataSource) {
    //     ,   
    row = newSheet.createRow((short) num);
    //        
    for (int j = 0; j < keyNames.length; j++) {
     //                           
     cell = row.createCell(j); cell.setCellStyle(style); cell.setCellValue(item.get(keyNames[j]));
    }
    num++;
   }
   // break  break         Sheet    
  }
  //    
  wb.write(fileOut);
  //    
  fileOut.close();
 }
 /**
  * 
  * @param Excel     
  * @param   Sheet 
  * @param   Sheet 
  * @param        
  * @param         
  */
 private static void copySheet(HSSFWorkbook wb, HSSFSheet fromsheet, HSSFSheet newSheet, int firstrow, int lasttrow) {
  //                
  if ((firstrow == -1) || (lasttrow == -1) || lasttrow < firstrow) {
   return;
  }
  //         
  Region region = null;
  for (int i = 0; i < fromsheet.getNumMergedRegions(); i++) {
   region = fromsheet.getMergedRegionAt(i);
   if ((region.getRowFrom() >= firstrow) && (region.getRowTo() <= lasttrow)) {
    newSheet.addMergedRegion(region);
   }
  }
  HSSFRow fromRow = null;
  HSSFRow newRow = null;
  HSSFCell newCell = null;
  HSSFCell fromCell = null;
  //     
  for (int i = firstrow; i < lasttrow; i++) {
   fromRow = fromsheet.getRow(i);
   if (fromRow != null) {
    for (int j = fromRow.getLastCellNum(); j >= fromRow.getFirstCellNum(); j--) {
     int colnum = fromsheet.getColumnWidth((short) j);
     if (colnum > 100) {
      newSheet.setColumnWidth((short) j, (short) colnum);
     }
     if (colnum == 0) {
      newSheet.setColumnHidden((short) j, true);
     } else {
      newSheet.setColumnHidden((short) j, false);
     }
    }
    break;
   }
  }
  //         
  for (int i = 0; i < lasttrow; i++) {
   fromRow = fromsheet.getRow(i);
   if (fromRow == null) {
    continue;
   }
   newRow = newSheet.createRow(i - firstrow);
   newRow.setHeight(fromRow.getHeight());
   for (int j = fromRow.getFirstCellNum(); j < fromRow.getPhysicalNumberOfCells(); j++) {
    fromCell = fromRow.getCell((short) j);
    if (fromCell == null) {
     continue;
    }
    newCell = newRow.createCell((short) j);
    newCell.setCellStyle(fromCell.getCellStyle());
    int cType = fromCell.getCellType();
    newCell.setCellType(cType);
    switch (cType) {
     case HSSFCell.CELL_TYPE_STRING:
      newCell.setCellValue(fromCell.getRichStringCellValue());
      break;
     case HSSFCell.CELL_TYPE_NUMERIC:
      newCell.setCellValue(fromCell.getNumericCellValue());
      break;
     case HSSFCell.CELL_TYPE_FORMULA:
      newCell.setCellValue(fromCell.getCellFormula());
      break;
     case HSSFCell.CELL_TYPE_BOOLEAN:
      newCell.setCellValue(fromCell.getBooleanCellValue());
      break;
     case HSSFCell.CELL_TYPE_ERROR:
      newCell.setCellValue(fromCell.getErrorCellValue());
      break;
     default:
      newCell.setCellValue(fromCell.getRichStringCellValue());
      break;
    }
   }
  }
 }
}
이상 은 전체 도구 류 의 핵심 코드 입 니 다.
테스트 데 이 터 는 다음 과 같다.

/**
  *    Sheet         
  */
 public static void ExcelTest(HttpServletResponse response){
  //     
  List<Map<String, String>> dataSourceList=new ArrayList<Map<String,String>>(){
   {
    add(new HashMap<String, String>(){{
     put("    ", "1");
     put("    ", "BUSINESS_ID");
     put("    ", "  id");
     put("    ", "VARCHAR");
     put("  ", "64");
     put("  ", " ");
     put("  ", "");
    }});
    add(new HashMap<String, String>(){{
     put("    ", "2");
     put("    ", "PROC_INST_ID");
     put("    ", "      ");
     put("    ", "VARCHAR");
     put("  ", "64");
     put("  ", "");
     put("  ", " ");
    }});
    add(new HashMap<String, String>(){{
     put("    ", "3");
     put("    ", "PROC_STATE");
     put("    ", "    ");
     put("    ", "VARCHAR");
     put("  ", "64");
     put("  ", " ");
     put("  ", " ");
    }});
    add(new HashMap<String, String>(){{
     put("    ", "4");
     put("    ", "APPLICANT");
     put("    ", "   ");
     put("    ", "VARCHAR");
     put("  ", "64");
     put("  ", " ");
     put("  ", " ");
    }});
    add(new HashMap<String, String>(){{
     put("    ", "5");
     put("    ", "LEAVE_TYPE");
     put("    ", "    ");
     put("    ", "VARCHAR");
     put("  ", "64");
     put("  ", " ");
     put("  ", " ");
    }});
    add(new HashMap<String, String>(){{
     put("    ", "6");
     put("    ", "REASON");
     put("    ", "    ");
     put("    ", "VARCHAR");
     put("  ", "64");
     put("  ", " ");
     put("  ", " ");
    }});
    add(new HashMap<String, String>(){{
     put("    ", "7");
     put("    ", "BEGIN_TIME");
     put("    ", "    ");
     put("    ", "TIMESTAMP");
     put("  ", "");
     put("  ", " ");
     put("  ", " ");
    }});
    add(new HashMap<String, String>(){{
     put("    ", "8");
     put("    ", "END_TIME");
     put("    ", "    ");
     put("    ", "TIMESTAMP");
     put("  ", "");
     put("  ", " ");
     put("  ", " ");
    }});
    add(new HashMap<String, String>(){{
     put("    ", "9");
     put("    ", "INSERT_PERSON");
     put("    ", "   ");
     put("    ", "VARCHAR");
     put("  ", "64");
     put("  ", " ");
     put("  ", " ");
    }});
    add(new HashMap<String, String>(){{
     put("    ", "10");
     put("    ", "APPROVEDBY");
     put("    ", "   ");
     put("    ", "VARCHAR");
     put("  ", "64");
     put("  ", " ");
     put("  ", " ");
    }});
   }
  };
  //       key 
  String[] keysStrings={"    ","    ","    ","    ","  ","  ","  "};
  //     
  String [] sheetNameStrings={"Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6"};
  String modelURLString="D:\\model\\model.xls";
  try {
   ExcelUtil.ExcelByModel("      ", modelURLString, dataSourceList, response, sheetNameStrings, keysStrings, 6);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
이상 은 Excel 보고서 가 템 플 릿 에 따라 여러 Sheet 을 내 보 내 고 생 성 하 는 작은 도구 입 니 다.필요 한 것 은 코드 를 참고 하여 실제 업무 수요 에 따라 코드 조정 을 할 수 있 습 니 다.
본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 우 리 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기