2009-06-03 3 views
6

私はいくつかの背景色を持ついくつかのセルを持つExcelシートを持っています。私はhtmlコードでこの色が必要なので、私はRGB形式またはSystem.Drawing.ColorにExcel.Range.Interior.Colorを変換したい。C#でExcel.Range.Interior.Colorを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))); 

しかし、私はExcel.Range.Interior.Colorによって返された値があるSystem.Drawing.Color

+0

Excelのカラー値は、長いRGB値に格納されています。左から右の順番は青、緑、赤です。 –

答えて

4

にSystem.Doubleを変換することができないエラーが発生します色の長整数値

'#000000 0

に等しくされる' #FFFFFFはあなたが進に10進値を変換する必要が16777215

に等しいです。そこから、RGBに簡単に変換できます。 (2つのオクテットにグループ化し、小数に戻す変換):)

+0

それは働いた。ありがとう:) –

+1

3年半後、これは私に役立ちます..:) グループをオクテット部分にします。ありがとう。 – MarioTheHedgehog

13

それはColorTranslatorがあなたのために仕事をさせるためにはるかに簡単です:

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

をそして、あなたはとVisual Studioの内部にExcelのプロジェクトを作成しているとき(代わりに、定期的な相互運用プロジェクトの)自動生成されたプロキシオブジェクトは、あなたがして戻ってint型に二重にr.Interior.Colorをキャストする必要があり、かつ:

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

完璧です。これは私のために良く働いています。 –