在POI XSSF工作簿中为合并区域添加边框

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

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

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

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

为多行执行此操作。

工作簿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)); 
 private void setBordersToMergedCells(XSSFWorkbook workBook, XSSFSheet sheet) { int numMerged = sheet.getNumMergedRegions(); for(int i= 0; i 

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