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