繁体   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