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

我有一些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

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

例如

'#000000等于0

'#FFFFFF等于16777215

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

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

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

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

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