在Apache POI 4.0中为XSSFWorkbook创建自定义颜色样式

Yau*_*aun 4 java apache-poi

要为Apache POI 3.7及更低版本中的XSSFWorkbook应用自定义颜色,可以执行以下操作:

java.awt.Color c = new java.awt.Color (1,2,3)
XSSFCellStyle xcs = xssfWorkbook.createCellStyle();
XSSFFont headerFont = xssfWorkbook.createFont();
headerFont.setColor(new XSSFColor(c));
xcs.setFont(headerFont);
cell.setCellStyle(xcs);
Run Code Online (Sandbox Code Playgroud)

在版本4.0中,XSSFColor(java.awt.Color)被删除。仍然可以通过使用其他“黑客”来达到相同目的:

XSSFColor xc = new XSSFColor();
xc.setARGBHex(String.format("%02x%02x%02x",c.getRed(),c.getGreen(),c.getBlue())); 
headerFont.setColor(xc);
Run Code Online (Sandbox Code Playgroud)

但是,这样做的“正确”方法是什么?大多数XSSFColor方法都涉及IndexedColorMap,但我找不到任何示例来说明如何在XSSFWorkbook中使用它来设置自定义颜色。

Joh*_*ohn 6

byte[] rgb = {120, 100, (byte) 200};
headerFont.setColor(new XSSFColor(rgb, new DefaultIndexedColorMap()));
Run Code Online (Sandbox Code Playgroud)

  • 你能添加更多关于 DefaultIndexedColorMap 的上下文吗?这实际上有什么用?每个工作簿应该只创建一次吗? (2认同)
  • 是的,您可以创建一个 DefaultIndexedColorMap 实例。它实现了 IndexedColorMap -一个用于颜色索引到 RGB 映射的接口。DefaultIndexedColorMap 使用 HSSF 中定义的旧颜色进行索引查找。HSSFColor 包含用于表示颜色的静态内部类成员。每种颜色都有一个索引(用于 Excel (tm) 中的标准调色板)、原生 (RGB) 三元组和字符串三元组。在 Apache POI 3.7 中,您使用 `public XSSFColor(CTColor color) { this(color, new DefaultIndexedColorMap()); 应用了自定义颜色。}` 带有默认颜色索引的方法 (2认同)