2012-06-30 8 views
8

Apache poi 3.7 kullanıyorum ve bir dizi hücre veya birleştirilmiş bölgeye kenarlık koymam gerekiyor. Sayfa ve çalışma kitabı türü XSSF olduğunda, birleştirilmiş bir bölgeye kenarlık uygulamak için nasılPOI XSSF çalışma kitabında birleştirilmiş bölgeye sınır ekleme

. HSSF türünde, RegionUtil-/HSSFRegionutil kullanıyorum, ancak XSSF türünde ilk nesneyi (Regionutil) kullanırsanız, onun çalışmaz ve hücrenin aralığına siyah arka plan rengi koyar.

Regionutil, CellRangeAddress ile çalışır ve bu sorun hakkında bilgi bulamıyorum. CellRangeAddres'in buna neden olup olmadığını bilmiyorum.

cevap

16

Bunu yapmak için, birleştirilen bölgedeki her hücreye boş bir hücre eklemeniz, ardından her hücrenin uygun kenarlıklarını eklemeniz gerekir. Örneğin, aşağıdaki kod, aynı satırda, birleştirilmiş bölgenin tamamında bir kenarlık ve bölgede ortalanmış metin bulunan 5 hücrenin birleştirilmiş bir bölümünü oluşturur.

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

Bu, satır aralığıyla bile birleştirilirse ne yapmalı? Yani, 3 sıra gibi birleştirilir, sonra hangi yolla yapılmalıdır. Lütfen öneriniz. – rick

4

Bunu çoklu satırlar için yapın.

Çalışma kitabı 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 sadece ben sadece 3.17 maç için biraz değiştirmek zorunda hayatımı kurtardı.

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); 

    } 
}