2009-06-03 17 views
6

Tôi có một bảng excel với một số tế bào có một số màu nền. Tôi cần màu này trong mã html và do đó tôi muốn chuyển đổi Excel.Range.Interior.Color sang định dạng RGB hoặc System.Drawing.Color.Làm thế nào để chuyển đổi Excel.Range.Interior.Color thành System.Drawing.Color trong C#?

Sau khi thực hiện điều đó, tôi sẽ sử dụng System.Drawing.ColorTranslator.ToHtml (System.Drawing.Color) để lấy màu được sử dụng trong thẻ html.

Tôi đã thử làm như sau:

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))); 

Nhưng tôi nhận được một lỗi mà tôi không thể chuyển đổi System.Double để System.Drawing.Color

+0

giá trị màu Excel được lưu trữ trong một giá trị RGB dài. Thứ tự từ trái sang phải màu xanh lam, xanh lục, đỏ. –

Trả lời

4

Giá trị trả về bởi Excel.Range.Interior.Color là một giá trị số nguyên dài của một màu.

Ví dụ:

'# 000000 là bằng 0

' #FFFFFF bằng 16777215

Bạn cần phải chuyển đổi các giá trị thập phân sang thập lục phân. Từ đó, nó rất dễ dàng để chuyển đổi sang RGB. (Nhóm thành 2 octet, và chuyển đổi trở lại thập phân) :)

+0

Nó hoạt động. Cảm ơn :) –

+1

3 và một nửa năm sau đó và điều này sẽ giúp tôi ..:) Nhóm thành phần octet. Cảm ơn. – MarioTheHedgehog

13

Đó là dễ dàng hơn nhiều để cho ColorTranslator làm việc cho bạn:

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

Và khi bạn đang viết một dự án Excel bên trong Visual Studio với tự động tạo ra đối tượng proxy (thay vì dự án Interop thường xuyên), bạn cần phải cast r.Interior.Color cú đúp, và sau đó trở lại một int:

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

hoàn hảo .. điều này đã làm việc tốt hơn cho tôi .. cảm ơn. –

Các vấn đề liên quan