【问题标题】:How to set background color for merged cells in Apache POI如何在 Apache POI 中为合并单元格设置背景颜色
【发布时间】:2026-01-29 19:15:02
【问题描述】:

我使用以下代码为单元格设置背景颜色:

XSSFCellStyle cellStyle = (XSSFCellStyle) excelStyle.getCellStyle();
cellStyle.setFillForegroundColor(new XSSFColor(java.awt.Color.decode("#FFFF99")));
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

但它不适用于合并的单元格,无论我尝试设置什么,它总是变黑。 只有当我设置预定义的颜色时它才有效:

cellStyle.setFillForegroundColor(IndexedColors.CORAL.index);

颜色由用户定义,所以我不能使用IndexedColors。此外,我无法创建自定义调色板颜色(如 here 所述),因为我的工作簿类型为 SXSSFWorkbook,而不是 HSSFWorkbook

如何设置合并单元格的背景颜色?

【问题讨论】:

  • 当我不知道如何使用 Apache POI 时,我通常会在 Excel 中进行格式化,然后查看结果 XLSX 文件中存储的内容。您通常可以猜到您应该在 POI 中做什么 :) 只需将 XLSX 重命名为 ZIP 并查看内部。比较未合并和合并单元格的格式。
  • @HonzaZidek 在样式文件中我发现了一些差异,但仍然无法说出问题所在pastebin.com/Nk1Xz9Dp
  • 您是否尝试过这里描述的所有内容:*.com/q/20561710/2886891
  • @HonzaZidek,是的。这实际上是我现在正在做的事情

标签: java excel apache-poi


【解决方案1】:

我已经尝试了以下步骤并为我工作。

  1. 创建工作表
  2. 创建一行
  3. 使用 RGB 值创建具有自定义颜色的样式
  4. 用于创建单元格的循环 > 创建单元格并向单元格 0 添加值,该值将出现在后续合并的单元格中,将样式应用于每个单元格,
  5. 最后合并单元格 > 假设您要将单元格 0 合并到第 0 行的单元格 3 使用 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));

经过大量调试,我发现导致合并单元格始终为黑色的问题在行下方。

CellUtil.setAlignment(sheetSummary.getRow(0).getCell(4), HorizontalAlignment.CENTER_SELECTION);

【讨论】: