2012-06-30 3 views
8

아파치 poi 3.7을 사용하고 있으며 셀 범위 나 병합 영역에 테두리를 넣어야합니다.POI XSSF 통합 문서의 병합 된 영역에 테두리 추가

시트 및 통합 문서 유형이 XSSF 일 때 어떻게 병합 영역에 테두리를 적용 할 수 있습니까? HSSF 유형에서는 RegionUtil-/HSSFRegionutil을 사용하지만 XSSF 유형에서 첫 번째 객체 (Regionutil)를 사용하는 경우 작동하지 않으며 셀 범위에 검은 색 배경색이 적용됩니다.

Regionutil이 (가) ourSually CellRangeAddress와 함께 작동하며이 문제에 대한 정보를 찾지 못했습니다. CellRangeAddres가 원인인지 여부는 알 수 없습니다.

답변

16

이렇게하려면 병합 된 영역의 모든 셀에 빈 셀을 추가 한 다음 각 셀에 적절한 테두리를 추가해야합니다. 예를 들어, 다음 코드는 동일한 행에 5 개의 셀이 병합 된 영역을 만들고 병합 된 영역 전체에 테두리를두고 텍스트를 영역의 가운데에 배치합니다.

XSSFWorkbook wb = new XSSFWorkbook(); 
CellStyle borderStyle = wb.createCellStyle(); 
borderStyle.setBorderBottom(CellStyle.BORDER_THIN); 
borderStyle.setBorderLeft(CellStyle.BORDER_THIN); 
borderStyle.setBorderRight(CellStyle.BORDER_THIN); 
borderStyle.setBorderTop(CellStyle.BORDER_THIN); 
borderStyle.setAlignment(CellStyle.ALIGN_CENTER); 
Sheet sheet = wb.createSheet("Test Sheet"); 
Row row = sheet.createRow(1); 
for (int i = 1; i <= 5; ++i) { 
    Cell cell = row.createCell(i); 
    cell.setCellStyle(borderStyle); 
    if (i == 1) { 
     cell.setCellValue("Centred Text"); 
    } 
} 
sheet.addMergedRegion(new CellRangeAddress(1, 1, 1, 5)); 
+0

행이 병합 된 경우 수행 할 작업. 즉, 3 개의 행이 병합되는 것과 같이, 어떤 방법으로 행해져 야하는지. 제발 제안 해주세요. – rick

4

여러 행에 대해 이렇게하십시오.

통합 문서 wb = new HSSFWorkbook();

// create a new sheet 
Sheet sheet = wb.createSheet(); 


CellStyle borderStyle = wb.createCellStyle(); 
borderStyle.setBorderBottom(CellStyle.BORDER_THIN); 
borderStyle.setBorderLeft(CellStyle.BORDER_THIN); 
borderStyle.setBorderRight(CellStyle.BORDER_THIN); 
borderStyle.setBorderTop(CellStyle.BORDER_THIN); 
borderStyle.setAlignment(CellStyle.ALIGN_CENTER); 
Sheet sheet1 = wb.createSheet("Test Sheet"); 
Row row = null; 
Cell cell; 
for (int i = 1; i <= 5; ++i) { 
    row = sheet1.createRow(i); 
    for(int j=1;j<=5;j++){ 
     cell= row.createCell(j); 
     cell.setCellStyle(borderStyle); 
     if (i == 1 && j==1) { 
      cell.setCellValue("Centred Text"); 
     } 
    } 
} 
sheet1.addMergedRegion(new CellRangeAddress(1, 5, 1, 5)); 
1
private void setBordersToMergedCells(XSSFWorkbook workBook, XSSFSheet sheet) { 
     int numMerged = sheet.getNumMergedRegions(); 

    for(int i= 0; i<numMerged;i++){ 
     CellRangeAddress mergedRegions = sheet.getMergedRegion(i); 
     RegionUtil.setBorderTop(CellStyle.BORDER_THIN, mergedRegions, sheet, workBook); 
     RegionUtil.setBorderLeft(CellStyle.BORDER_THIN, mergedRegions, sheet, workBook); 
     RegionUtil.setBorderRight(CellStyle.BORDER_THIN, mergedRegions, sheet, workBook); 
     RegionUtil.setBorderBottom(CellStyle.BORDER_THIN, mergedRegions, sheet, workBook); 
    } 


} 
1

@Jesanagua은 그냥 3.17에 맞게 약간 수정했다, 내 인생을 저장.

private void setBordersToMergedCells(HSSFSheet sheet) { 
    int numMerged = sheet.getNumMergedRegions(); 
    for (int i = 0; i < numMerged; i++) { 
     CellRangeAddress mergedRegions = sheet.getMergedRegion(i); 
     RegionUtil.setBorderLeft(BorderStyle.THIN, mergedRegions, sheet); 
     RegionUtil.setBorderRight(BorderStyle.THIN, mergedRegions, sheet); 
     RegionUtil.setBorderTop(BorderStyle.THIN, mergedRegions, sheet); 
     RegionUtil.setBorderBottom(BorderStyle.THIN, mergedRegions, sheet); 

    } 
}