2 回答
TA贡献2019条经验 获得超9个赞
正如另一个答案所说,在自定义颜色时,需要使用setFillForegroundColor(XSSFColor color)而不是使用索引颜色。但是也可以使用org.apache.poi.ss.usermodel.IndexedColorsXSSFCellStyle
中的索引颜色。如果不需要使用自定义颜色,这将是最兼容的方式。XSSF
但也应该避免创建XSSFColor
from 。java.awt.Color
构造函数XSSFColor(java.awt.Color clr, IndexedColorMap map)被标记为“仅测试”。并且java.awt.Color
在某些情况下将不可用。
因此,如果需要“从十六进制代码设置单元格背景颜色”并且十六进制代码位于 a 中String
,org.apache.commons.codec.binary.Hex
则可用于byte[]
从中获取数组String
。Apache commons codec
已经是 的依赖项之一apache poi
。然后 可以使用构造函数XSSFColor(byte[] rgb, IndexedColorMap colorMap) 。IndexedColorMap
到目前为止还没有使用。这样就可以设置了null
。如果IndexedColorMap
以后有任何使用,那么无论如何都必须调整代码。
例子:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.commons.codec.binary.Hex;
class CreateXSSFColor {
public static void main(String[] args) throws Exception {
try (Workbook workbook = new XSSFWorkbook();
FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {
String rgbS = "FFF000";
byte[] rgbB = Hex.decodeHex(rgbS); // get byte array from hex string
XSSFColor color = new XSSFColor(rgbB, null); //IndexedColorMap has no usage until now. So it can be set null.
XSSFCellStyle cellStyle = (XSSFCellStyle) workbook.createCellStyle();
cellStyle.setFillForegroundColor(color);
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
Sheet sheet = workbook.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("yellow");
cell.setCellStyle(cellStyle);
workbook.write(fileout);
}
}
}
TA贡献1770条经验 获得超3个赞
我注意到,在处理 xlsx 文件 (XSSF) 中的颜色时,使用索引颜色效果不太好。默认情况下,似乎没有任何颜色的索引XSSFWorkbook
,因此您不能使用未索引的颜色索引。
但是,您可以使用直接采用setFillForegroundColor
XSSFColor
.
cellStyle.setFillForegroundColor(bgColor);
当我使用此重载时,我会得到您期望的黄色作为背景。
通常,在 XSSF 中使用颜色时,您应该使用其XSSFColor
本身而不是其索引。这也适用于其他事物,例如其他图案颜色(“背景”)、边框颜色和字体颜色。
添加回答
举报