2012-06-30 20 views
8

Tôi đang sử dụng apache poi 3.7 và tôi cần đặt đường viền vào một dải ô hoặc vùng được hợp nhất.Thêm đường viền vào vùng đã hợp nhất trong sổ làm việc POI XSSF

làm cách nào để áp dụng đường viền cho vùng được hợp nhất khi loại bảng tính và sổ làm việc là XSSF. Trong kiểu HSSF, tôi sử dụng RegionUtil-/HSSFRegionutil, nhưng nếu sử dụng đối tượng đầu tiên (Regionutil) trong kiểu XSSF thì nó không hoạt động và đặt một màu nền đen cho phạm vi ô.

Regionutil ussually hoạt động với CellRangeAddress và tôi không tìm thấy thông tin về sự cố này. Tôi không biết nếu CellRangeAddres gây ra điều này.

Trả lời

16

Để thực hiện việc này, bạn phải thêm ô trống vào mọi ô trong vùng đã hợp nhất, sau đó thêm đường viền thích hợp cho mỗi ô. Ví dụ: đoạn mã sau sẽ tạo vùng được hợp nhất gồm 5 ô trong cùng một hàng, với đường viền xung quanh toàn bộ vùng được hợp nhất và văn bản được căn giữa trong vùng.

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

Điều cần làm nếu điều đó được hợp nhất ngay cả hàng khôn ngoan. tức là, giống như 3 hàng được sáp nhập, thì cách nào nên được thực hiện. Xin đề nghị. – rick

4

Thực hiện việc này cho nhiều hàng.

Workbook 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 chỉ cứu mạng tôi, tôi chỉ phải thay đổi một chút để phù hợp với 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); 

    } 
} 
Các vấn đề liên quan