首页 文章

在POI中为合并的单元格创建边框

提问于
浏览
5

任何人都可以解释我如何使用Apache POI为合并的单元格创建边框?
我正在使用的代码只影响一个单元格 .

sheet.addMergedRegion(new CellRangeAddress(1, 1, 2, 3));
Cell monthCell = subheaderRow.createCell(2);
monthCell.setCellValue(2);
monthCell.setCellStyle(styles.get("month"));



style = wb.createCellStyle();

style.setBorderBottom(CellStyle.BORDER_THIN);
style.setBorderTop(CellStyle.BORDER_THIN);
style.setBorderLeft(CellStyle.BORDER_THIN);
style.setBorderRight(CellStyle.BORDER_THIN);
style.setAlignment(CellStyle.ALIGN_CENTER);
style.setAlignment(CellStyle.ALIGN_CENTER);
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
// style.setFillForegroundColor(IndexedColors.DARK_BLUE.getIndex());
// style.setFillPattern(CellStyle.SOLID_FOREGROUND);
// style.setFont(monthFont);
styles.put("month", style);

2 回答

  • 7

    这可以通过以下方式完成:

    public void doMerge(int rowIndex, int columnIndex, int rowSpan, int columnSpan) {
        Cell cell = sheet.getRow(rowIndex).getCell(columnIndex);
        CellRangeAddress range = new CellRangeAddress(rowIndex, rowIndex + rowSpan - 1, columnIndex, columnIndex
                + columnSpan - 1);
    
        sheet.addMergedRegion(range);
    
        RegionUtil.setBorderBottom(cell.getCellStyle().getBorderBottom(), range, sheet, sheet.getWorkbook());
        RegionUtil.setBorderTop(cell.getCellStyle().getBorderTop(), range, sheet, sheet.getWorkbook());
        RegionUtil.setBorderLeft(cell.getCellStyle().getBorderLeft(), range, sheet, sheet.getWorkbook());
        RegionUtil.setBorderRight(cell.getCellStyle().getBorderRight(), range, sheet, sheet.getWorkbook());
    
        RegionUtil.setBottomBorderColor(cell.getCellStyle().getBottomBorderColor(), range, sheet, sheet.getWorkbook());
        RegionUtil.setTopBorderColor(cell.getCellStyle().getTopBorderColor(), range, sheet, sheet.getWorkbook());
        RegionUtil.setLeftBorderColor(cell.getCellStyle().getLeftBorderColor(), range, sheet, sheet.getWorkbook());
        RegionUtil.setRightBorderColor(cell.getCellStyle().getRightBorderColor(), range, sheet, sheet.getWorkbook());
    }
    
  • 0

    如果要为所有合并的单元格添加边框,首先必须为合并的所有行和列创建虚拟单元格(不仅适用于您正在使用的单元格,而且适用于所有单元格) . 然后应用样式 . 假设您要合并第1列到第10列以及第0行和第1行的单元格 . 为这些行和列创建虚拟单元格,并覆盖它以创建单元格 .

    Loop

    Row myRow1= sheet.createRow((short) 0);
    Row myRow2 = sheet.createRow((short) 1);
    for (int i = 1; i <= 10; ++i) 
         {
                Cell blankCell1 = myRow1.createCell(i);
                blankCell1.setCellStyle(style);
                Cell blankCell2 = myRow2.createCell(i);
                blankCell2.setCellStyle(style);
         }
    

    For Style

    HSSFCellStyle style= wb.createCellStyle();
    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
    

    Creating WorkBook

    HSSFWorkbook wb = new HSSFWorkbook();
    Sheet sheet = wb.createSheet("Name of the Excel");
    

    For Merging

    sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 10)); //(fromRow, toRow, fromColumn,toColumn)
    

    希望这可以帮助 .

相关问题