在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转换。
请帮助我!!
提前致谢。
答案 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文件):
当XSSF处理主题颜色时,会出现这些错误。