11

我正在使用 apache poi 3.7,我需要将边框放置到一系列单元格或合并区域。

当工作表和工作簿类型为 XSSF 时,如何将边框应用于合并区域。在 HSSF 类型中,我使用 RegionUtil-/HSSFRegionutil,但如果在 XSSF 类型中使用第一个对象 (Regionutil),则它不起作用并将黑色背景颜色放入单元格范围。

Regionutil 通常与 CellRangeAddress 一起使用,我找不到有关此问题的信息。我不知道 CellRangeAddres 是否会导致这种情况。

4

4 回答 4

23

为此,您必须为合并区域中的每个单元格添加一个空白单元格,然后为每个单元格添加适当的边框。例如,以下代码将在同一行中创建一个包含 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));
于 2012-10-03T12:10:25.300 回答
8
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);
    }


}
于 2017-10-03T11:28:21.307 回答
4

对多行执行此操作。

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));
于 2014-04-14T10:37:19.783 回答
4

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

    }
}
于 2017-10-04T22:03:26.313 回答