首页 文章

Apache POI和颜色

提问于
浏览
1

我对Apache POI有一些问题,一些帮助会很好!!

我想删除Excel工作表子部分中的颜色 . 为此,我尝试的第一件事是渲染我想要清理的单元格(仅说第一行中的一个)并将其颜色设置为白色:

cell.getCellStyle().setFillForegroundColor(IndexedColors.WHITE.index);

但是,如果我这样做,一些未渲染的单元格(比如第二行中的一个)的颜色也会变为白色单元格 . 这很奇怪,因为改变的细胞没有相同的前景色,所以我认为它们会有不同的风格......

因此,我尝试了另一种方式:

CellStyle style = workbook.createCellStyle();
style.setFillForegroundColor(IndexedColors.WHITE.index);
cell.setCellStyle(style);

这个想法是为了避免改变Excel工作表中不同单元格可能常见的样式 . 实际上,它解决了颜色问题,但如果我这样做,我会松开Excel表格中的不同样式,而我只想删除一些颜色......

我正在使用通用工作簿,我正在阅读xlsx(与xls相同的问题)你知道怎么做吗?很多,问候,

1 回答

  • 8

    如果要删除颜色,那么将填充图案更改为 NO_FILL 可能是有意义的,而不是将颜色设置为白色,如下所示:

    style.setFillPattern(CellStyle.NO_FILL)
    

    回到你的主要问题,你有2个处理细胞样式修正的选项:

    • By modifying style viaCellUtil.setCellStyleProperty method

    CellUtil.setCellStyleProperty(cell, workbook, CellUtil.FILL_PATTERN, CellStyle.NO_FILL)

    • By cloning styles from the existing style and modifying the property

    示例代码如下所示:

    CellStyle oldStyle = cell.getCellStyle();
     CellStyle newStyle = workbook.createCellStyle();
     newStyle.cloneStyleFrom(oldStyle);
     newStyle.setFillPattern(CellStyle.NO_FILL);
     cell.setCellStyle(newStyle);
    

    但是在第二种情况下,您将为每个单元格创建一个新的单元格样式,您可能会考虑重用一些已更新的单元格样式并实现某种缓存(否则可能会导致性能问题并达到允许的样式限制) .

相关问题