我试图在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显然是红色而不是蓝色。
答案 0 :(得分:9)
这项工作对我来说:
int colorNumber = System.Convert.ToInt32(((Range) worksheet.Cells[rowNumber,columnNumber]).Interior.Color);
Color color = System.Drawing.ColorTranslator.FromOle(colorNumber);
答案 1 :(得分:1)
试试这个:
System.Color col = System.Drawing.ColorTranslator.FromOle((int) r.Interior.Color);
string htmlCol = System.Drawing.ColorTranslator.ToHtml(col);
(警告,我没有测试过这个)