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

Posted

技术标签:

【中文标题】在 C# 中获取 Excel 单元格背景颜色的问题【英文标题】:Problem with getting Excel cell background colors in C# 【发布时间】:2010-10-31 17:24:53 【问题描述】:

我正在尝试获取 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 明显是红色而不是蓝色。

【问题讨论】:

【参考方案1】:

这对我有用:


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

【讨论】:

我对读取单元格颜色有相同的要求,我使用您上面建议的代码。但是使用此代码我只有白色,但在 excel 中还有其他颜色,如红色、蓝色。你能帮我解决一下吗? @dwan 我建议检查您是否从正确的单元格中获取颜色。确保您有正确的 rowNumber 和 columnNumber。 如果我想检查一列,对于列中的每个单元格,如果它有填充,删除整行直到列中的每个单元格都被检查?【参考方案2】:

试试这个:

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 你确定你不是在看 ToOle() 吗?我看到 FromOle() 需要一个 int。

以上是关于在 C# 中获取 Excel 单元格背景颜色的问题的主要内容,如果未能解决你的问题,请参考以下文章

在pandas read_excel中获取Excel单元格背景颜色?

Java从Apache poi获取excel单元格背景颜色

在excel中怎么快速批量删除单元格背景颜色为红色的数据?

C# 设置DEV控件gridview单元格字体颜色

excel按背景颜色显示数据多少

怎么在excel中一个单元格中显示出自动计算的标记背景颜色的单元格数值的和