我无法使用EPPLUS获取背景颜色的真实RGB值。
我的代码只适用于在Excel上设置为RGB的颜色,没有识别带有托盘颜色的单元格。
这是代码,希望有人可以帮助我:
var w = angular.element($window);
w.height();

答案 0 :(得分:4)
如果你在Excel颜色下拉列表中选择了一个“主题颜色”而不是“标准颜色”,或者从颜色选择器中选择它,它似乎不起作用,如此问题的答案中所述:{{ 3}}
似乎不支持主题 - EPPlus Excel Change cell color
库不支持什么(这些是最明显的功能)? [...] *主题
答案 1 :(得分:1)
事实证明,这是LookupColor
在EPPlus中如何运作的怪癖。具体来说,颜色returned in this case is AA{R}{G}{B}的格式,分别为R,G和B中的每一个的alpha和两个恒定长度序列,指定灰色阴影。但是,如果你看一下代码,你可能会得到一些非常奇怪的颜色(即它可能会被窃听)。这是因为使用的常量长度范围为1到3个字符,上限为0x0200
。
例如,((int)(decimal.Round(-1M * -512))).ToString("X")
会返回"200"
,通过推断,会返回#FF200200200
。但是,如果没有提交修补程序以更改其处理方式,那么执行此操作的方法可能是相信 可以为通道返回的上限,然后在0-&gt之间缩放; FF
有关执行此操作的方法,请参阅下文。请注意,如果此 已在EPPlus中自行修复,则以下内容会错误地缩放(因为实际上限为FF
,而不是0x0200
)。
private string EPPLookupColorFixed(ExcelColor sourceColor)
{
var lookupColor = sourceColor.LookupColor();
const int maxLookup = 63;
bool isFromTable = (0 <= sourceColor.Indexed) && (maxLookup > sourceColor.Indexed);
bool isFromRGB = (null != sourceColor.Rgb && 0 < sourceColor.Rgb.Length);
if (isFromTable || isFromRGB)
return lookupColor;
// Ok, we know we entered the else block in EPP - the one
// that doesn't quite behave as expected.
string shortString = "0000";
switch (lookupColor.Length)
{
case 6:
// Of the form #FF000
shortString = lookupColor.Substring(3, 1).PadLeft(4, '0');
break;
case 9:
// Of the form #FFAAAAAA
shortString = lookupColor.Substring(3, 2).PadLeft(4, '0');
break;
case 12:
// Of the form #FF200200200
shortString = lookupColor.Substring(3, 3).PadLeft(4, '0');
break;
}
var actualValue = short.Parse(shortString, System.Globalization.NumberStyles.HexNumber);
var percent = ((double)actualValue) / 0x200d;
var byteValue = (byte)Math.Round(percent * 0xFF,0);
var byteText = byteValue.ToString("X");
byteText = byteText.Length == 2 ? byteText : byteText.PadLeft(2, '0');
return $"{lookupColor.Substring(0, 3)}{byteText}{byteText}{byteText}";
}