簡體   English   中英

如何使用 POI 為 HSSCell 設置自定義顏色?

[英]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 文件格式( *.xlsHSSF )中,所有 colors 都需要在調色板中進行索引。 因此自定義顏色需要覆蓋默認調色板顏色。 並且要設置填充前景色,應該使用索引而不是顏色本身。 所以void setFillForegroundColor(short bg)應該用於HSSF

以下代碼用於為XSSFHSSF設置自定義填充前景色。 對於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM