[英]How to set a custom color to a HSSCell using POI?
我想在 POI 中為CellStyle
設置自定義顏色,但它似乎沒有被應用。
我有以下代碼:
HSSFWorkbook workBook = new HSSFWorkbook();
HSSFSheet sheet = workBook.createSheet("Bank Statement");
HSSFPalette palette = workBook.getCustomPalette();
palette.setColorAtIndex((short) 1, (byte) 60, (byte) 120, (byte) 216);
HSSFColor color = palette.findSimilarColor(60, 120, 216);
CellStyle cellStyleHeader = workBook.createCellStyle();
cellStyleHeader.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cellStyleHeader.setFillForegroundColor(color);
cellStyleHeader.setFont(createHeaderFont(workBook));
HSSFCell cell = row.createCell(cellIndex);
cell.setCellType(CellType.STRING);
cell.setCellValue("Date");
cell.setCellStyle(style);
沒有應用背景顏色。 顏色是白色的。 color
的值不是 null,但不是相同的顏色(通過調試器運行時):
設置自定義顏色的正確方法是什么?
似乎void setFillForegroundColor(Color color)對於HSSFColor
不能正常工作。
在二進制 Excel 文件格式( *.xls
, HSSF
)中,所有 colors 都需要在調色板中進行索引。 因此自定義顏色需要覆蓋默認調色板顏色。 並且要設置填充前景色,應該使用索引而不是顏色本身。 所以void setFillForegroundColor(short bg)應該用於HSSF
。
以下代碼用於為XSSF
和HSSF
設置自定義填充前景色。 對於HSSF
,它會覆蓋調色板中的HSSFColor.HSSFColorPredefined.LIME
顏色。
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
public class CreateExcelCellFillCustomColor {
public static void main(String[] args) throws Exception {
byte[] rgb = new byte[]{(byte) 60, (byte) 120, (byte) 216};
Workbook workbook = new HSSFWorkbook(); String filePath = "./Excel.xls";
//Workbook workbook = new XSSFWorkbook(); String filePath = "./Excel.xlsx";
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
if (workbook instanceof XSSFWorkbook) {
XSSFColor color = new XSSFColor(rgb, null);
cellStyle.setFillForegroundColor(color);
} else if (workbook instanceof HSSFWorkbook) {
HSSFWorkbook hssfworkbook = (HSSFWorkbook)workbook;
HSSFPalette palette = hssfworkbook.getCustomPalette();
palette.setColorAtIndex(HSSFColor.HSSFColorPredefined.LIME.getIndex(), rgb[0], rgb[1], rgb[2]);
HSSFColor color = palette.findSimilarColor(rgb[0], rgb[1], rgb[2]);
//cellStyle.setFillForegroundColor(color); // does not work correctly for HSSF
cellStyle.setFillForegroundColor(color.getIndex());
}
Sheet sheet = workbook.createSheet();
Cell cell = sheet.createRow(0).createCell(0);
cell.setCellStyle(cellStyle);
cell.setCellValue("test");
FileOutputStream out = new FileOutputStream(filePath);
workbook.write(out);
out.close();
workbook.close();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.