当前位置: 首页 > 知识库问答 >
问题:

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

祁嘉木
2023-03-14

谁能解释一下如何使用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个答案

章景同
2023-03-14

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

循环

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

风格

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

创建工作簿

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

合并

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

希望这有帮助。

容阳焱
2023-03-14

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

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());
}
 类似资料:
  • 在旧版本中,您可以键入以下内容: 这会产生外部边框--即使是在合并的单元格周围,也会使用选定的颜色。不幸的是,在POI的新版本中,我似乎不能使用索引颜色,因为获得自定义RGB颜色索引的方法不起作用,并且被降级或标记为仅供测试。

  • 我使用的是Apache POI,我需要在一个单元格或合并区域的范围内放置边框。我正在合并三行五列的单元格。但我无法添加边界。那么我该怎么做呢?

  • 我知道如何用Apache POI Word垂直合并单元格。但似乎如果创建了新行,合并就不会生效。 下面是输入表: 我希望在和之间添加一个新行,并将新行的第一列单元格合并到C2,如下所示: 那么有没有合并新创建行的解决方案呢?我真的不想这样拆分这个操作:添加行>将docx保存到磁盘>从磁盘读取docx>合并行。

  • 我想数一下一行中有多少单元格被合并了?我在Excel中合并(缩放)它,在Java中我想显示例如:“合并的单元格:4”(A1,B1,C1,D1)?

  • 我想在POI中形成如下的excel输出: 如图所示,我在Header3、Header4和Header5下分别有3个子列。 名单如下: ListA-包含列A的值 ListB-包含列B的值 List1-是数据库行的列表,每行有3列。第一列位于标题3下,第二列位于标题4下,第三列位于标题5下,即分别为C、F和i列。 List2和List3-与List1相似,每个值分别位于Header3、4和5之下。列表

  • 问题内容: 还有其他方法可以使用Apache POI库在Excel中合并单元格? 我正在尝试使用以下内容,但无法正常工作 问题答案: 您可以使用 该示例将从B2合并到E2。请记住,它是基于零的索引(例如POI版本3.12)。 有关详细信息,请参见《BusyDeveloper指南》。