2 回答

TA貢獻2019條經(jīng)驗 獲得超9個贊
正如另一個答案所說,在自定義顏色時,需要使用setFillForegroundColor(XSSFColor color)而不是使用索引顏色。但是也可以使用org.apache.poi.ss.usermodel.IndexedColorsXSSFCellStyle
中的索引顏色。如果不需要使用自定義顏色,這將是最兼容的方式。XSSF
但也應(yīng)該避免創(chuàng)建XSSFColor
from 。java.awt.Color
構(gòu)造函數(shù)XSSFColor(java.awt.Color clr, IndexedColorMap map)被標記為“僅測試”。并且java.awt.Color
在某些情況下將不可用。
因此,如果需要“從十六進制代碼設(shè)置單元格背景顏色”并且十六進制代碼位于 a 中String
,org.apache.commons.codec.binary.Hex
則可用于byte[]
從中獲取數(shù)組String
。Apache commons codec
已經(jīng)是 的依賴項之一apache poi
。然后?可以使用構(gòu)造函數(shù)XSSFColor(byte[] rgb, IndexedColorMap colorMap) 。IndexedColorMap
到目前為止還沒有使用。這樣就可以設(shè)置了null
。如果IndexedColorMap
以后有任何使用,那么無論如何都必須調(diào)整代碼。
例子:
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條經(jīng)驗 獲得超3個贊
我注意到,在處理 xlsx 文件 (XSSF) 中的顏色時,使用索引顏色效果不太好。默認情況下,似乎沒有任何顏色的索引XSSFWorkbook
,因此您不能使用未索引的顏色索引。
但是,您可以使用直接采用setFillForegroundColor
XSSFColor
.
cellStyle.setFillForegroundColor(bgColor);
當我使用此重載時,我會得到您期望的黃色作為背景。
通常,在 XSSF 中使用顏色時,您應(yīng)該使用其XSSFColor
本身而不是其索引。這也適用于其他事物,例如其他圖案顏色(“背景”)、邊框顏色和字體顏色。
添加回答
舉報