如何在C#中将Excel.Range.Interior.Color转换为System.Drawing.Color?

时间:2009-06-03 16:49:33

标签: c# excel

我有一张excel表,其中一些单元格有一些背景颜色。我需要在HTML代码中使用这种颜色,因此我想将Excel.Range.Interior.Color转换为RGB格式或System.Drawing.Color。

执行此操作后,我将使用System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color)获取要在html标记中使用的颜色。

我尝试过以下操作:

Excel.Range r = (Excel.Range)m_objRange[2, 2];
System.ComponentModel.TypeConverter converter = System.ComponentModel.TypeDescriptor.GetConverter(r.Interior.Color);
               MessageBox.Show(""+converter.ConvertTo(r.Interior.Color,typeof(System.Drawing.Color)));

但我得到一个错误,我无法将System.Double转换为System.Drawing.Color

3 个答案:

答案 0 :(得分:14)

让ColorTranslator为您完成工作要容易得多:

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

当您在Visual Studio中使用自动生成的代理对象(而不是常规的Interop项目)编写Excel项目时,您需要将r.Interior.Color转换为double,然后返回到int:

System.Drawing.Color col = System.Drawing.ColorTranslator.FromOle((int)((double) r.Interior.Color));

答案 1 :(得分:4)

Excel.Range.Interior.Color返回的值是颜色的长整数值。

<强>实施例

'#000000等于0

'#FFFFFF等于16777215

您需要将十进制值转换为十六进制。从那里,很容易转换为RGB。 (分组为2个八位字节,并转换回十进制):)

答案 2 :(得分:0)

这是我使用Function进行操作的方式,只需替换蓝色和红色字节即可。 vb.net中的用法示例:

apply