APACHE POI从Java中获取excel的精确字体颜色

时间:2012-07-16 09:22:22

标签: java apache-poi

在excel表中如何使用Java中的Apache POI获取确切的Font颜色值。我尝试使用

获取字体颜色

org.apache.poi.ss.usermodel.Font f = book.getFontAt(style.getFontIndex()); short clrIdx = f.getColor();

但它没有给出确切的颜色索引。获得此颜色值后,我必须在PDFtable中应用相同的颜色。在这里,我正在通过阅读每个excel单元格格式并在iText中使用pdf创建相同的格式来进行pdf转换。

请帮助我!!

提前致谢。

1 个答案:

答案 0 :(得分:4)

您需要从Excel字体颜色中获取RGB值。您可以通过几个步骤获得这些值。

要获取适当的POI Color对象,您需要沿着HSSF或XSSF路径向下,提取相应的HSSFColor或XSSFColor,然后从颜色中获取RGB值。

int red = 0;
int green = 0;
int blue = 0;
if (font instanceof HSSFont)
{
   HSSFColor color = ((HSSFFont) font).getHSSFColor(hssfWorkbook);
   // 0: red, 1: green, 2: blue
   short[] rgb = color.getTriplet();
   red = rgb[0];
   green = rgb[1];
   blue = rgb[2];
}
else if (font instanceof XSSFFont)
{
   XSSFColor color = ((XSSFFont) font).getXSSFColor();
   byte[] rgb = color.getRgb();
   // Bytes are signed, so values of 128+ are negative!
   // 0: red, 1: green, 2: blue
   red = (rgb[0] < 0) ? (rgb[0] + 256) : rgb[0];
   green = (rgb[1] < 0) ? (rgb[1] + 256) : rgb[1];
   blue = (rgb[2] < 0) ? (rgb[2] + 256) : rgb[2];
}
// Use the rgb values here.

然后,您可以使用rgb值在iText中创建BaseColor对象。

<强>更新

有几个与在XSSF中提取颜色相关的Apache POI错误(对于.xlsx文件):

#51222

#51236

#52079

#53274

当XSSF处理主题颜色时,会出现这些错误。