在C#中获取Excel单元格背景颜色的问题

6

我正在尝试在C#中获取Excel表格中某些单元格的背景颜色。

我正在使用以下代码:

Excel.Range r = (Excel.Range)m_objRange[i, j];                                  
int decValue = int.Parse(r.Interior.Color.ToString());
string hexValue = decValue.ToString("X");

所以我得到了一个长的十进制值,然后将其转换为十六进制以在HTML代码中使用。 现在我有一个获取正确颜色的问题。例如:
案例1。
实际颜色-红色
返回的十进制值-255
相应的十六进制值-FF(或0000FF)
我得到的相应颜色-蓝色
案例2。
实际颜色-蓝色
返回的十进制值-16711680
相应的十六进制值-FF0000
我得到的相应颜色-红色
案例3。
实际颜色-绿色
返回的十进制值-32768
相应的十六进制值-8000
我得到的相应颜色-白色
现在,在情况1中,我想我应该将FF的十六进制值解释为#FF0000,以将其作为红色?
在情况3中,我应该将十六进制值8000解释为#008000,以将其作为绿色?
有没有一种方法可以直接获取六位十六进制值,这将完全是我想要的颜色? 我是否得到了错误的十进制值或者我没有正确地将十进制转换为十六进制?
在案例2中发生了什么?这里我得到了一个六位十六进制值,但它完全是错误的。FF0000显然是红色而不是蓝色。
2个回答

10
这段代码对我很有用:

int colorNumber = System.Convert.ToInt32(((Range) worksheet.Cells[rowNumber,columnNumber]).Interior.Color);
Color color = System.Drawing.ColorTranslator.FromOle(colorNumber);


我有同样的需求来读取单元格颜色,我使用了你上面建议的代码。但是用这个代码我只得到了白色,但是在Excel中还有其他颜色,比如红色、蓝色。你能帮我解决一下吗? - dwan
@dwan 我建议你检查一下是否从正确的单元格获取了颜色。确保你有正确的行号和列号。 - Campinho
如果我想要检查一列中的每个单元格是否有填充,然后删除整行直到该列中的每个单元格都被检查过,该怎么办? - Si8

1

尝试这个:

System.Color col = System.Drawing.ColorTranslator.FromOle((int) r.Interior.Color);
string htmlCol = System.Drawing.ColorTranslator.ToHtml(col);

(警告,我没有测试过这个)


在C#中这个不起作用。ColorTranslator.FromOle(System.Drawing.Color)需要System.Drawing.Color作为参数,因此如果我传递r.Interior.Color,我会得到一个错误,即无法将int转换为System.Drawing.Color。 - Sam
你确定你没有看ToOle()吗?我看到FromOle()需要一个整数。 - yoyoyoyosef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接