ApachePOI在Java中从excel获取精确的字体颜色

ApachePOI在Java中从excel获取精确的字体颜色,java,apache-poi,Java,Apache Poi,在excel工作表中,如何在java中使用ApachePOI获得准确的字体颜色值。我试图通过使用 org.apache.poi.ss.usermodel.Font f=book.getFontAt(style.getFontIndex()); 短clrIdx=f.getColor() 但它并没有给出确切的颜色指数。获得此颜色值后,我必须在PDFtable中应用相同的颜色。在这里,我通过读取每个excel单元格格式并在iText中使用pdf创建相同的格式来进行excel到pdf的转换 请帮帮我 提

在excel工作表中,如何在java中使用ApachePOI获得准确的字体颜色值。我试图通过使用

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

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

请帮帮我


提前感谢。

您需要从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.
int-red=0;
绿色整数=0;
int蓝色=0;
如果(HSSFont的字体实例)
{
HSSFColor color=((hssfont)字体)。获取HSSFColor(hssfWorkbook);
//0:红色,1:绿色,2:蓝色
short[]rgb=color.getTriplet();
红色=rgb[0];
绿色=rgb[1];
蓝色=rgb[2];
}
else if(字体实例为XSSFFont)
{
XSSFColor color=((XSSFFont)font.getXSSFColor();
字节[]rgb=color.getRgb();
//字节是有符号的,所以128+的值是负数!
//0:红色,1:绿色,2:蓝色
红色=(rgb[0]<0)?(rgb[0]+256):rgb[0];
绿色=(rgb[1]<0)?(rgb[1]+256):rgb[1];
蓝色=(rgb[2]<0)?(rgb[2]+256):rgb[2];
}
//在此处使用rgb值。
然后可以使用rgb值在iText中创建
BaseColor
对象

更新:

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


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

您需要从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.
int-red=0;
绿色整数=0;
int蓝色=0;
如果(HSSFont的字体实例)
{
HSSFColor color=((hssfont)字体)。获取HSSFColor(hssfWorkbook);
//0:红色,1:绿色,2:蓝色
short[]rgb=color.getTriplet();
红色=rgb[0];
绿色=rgb[1];
蓝色=rgb[2];
}
else if(字体实例为XSSFFont)
{
XSSFColor color=((XSSFFont)font.getXSSFColor();
字节[]rgb=color.getRgb();
//字节是有符号的,所以128+的值是负数!
//0:红色,1:绿色,2:蓝色
红色=(rgb[0]<0)?(rgb[0]+256):rgb[0];
绿色=(rgb[1]<0)?(rgb[1]+256):rgb[1];
蓝色=(rgb[2]<0)?(rgb[2]+256):rgb[2];
}
//在此处使用rgb值。
然后可以使用rgb值在iText中创建
BaseColor
对象

更新:

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


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

您是否尝试在电子表格调色板中使用该索引查找颜色的详细信息?我想获得文本的确切颜色,我需要将该颜色转换为iText Pdf basecolor…您是否尝试在电子表格中使用该索引查找颜色的详细信息调色板?我想得到文本的确切颜色,我需要将该颜色转换为iText Pdf basecolor。。。。