【问题标题】:How to assign System.Drawing.Color to Microsoft.Office.Interop.Excel.ColorFormat如何将 System.Drawing.Color 分配给 Microsoft.Office.Interop.Excel.ColorFormat
【发布时间】:2015-02-15 13:20:53
【问题描述】:

示例代码如下,

Chart.SerialsCollection(1).Point(1).Format.Fill.ForeColor = System.Drawing.Color.Red;

返回错误。不能隐式转换类型,一个是Struct,一个是ColorFormat。

ForeColor.RGB 是 Int 类型,我只能从 Color.Red.R、Color.Red.G 和 Color.Red.B 中得到 3 个整数。如何将我想要的颜色分配给 ForeColor 属性?

【问题讨论】:

标签: c# excel colors system.drawing


【解决方案1】:

按照 cmets 的建议,使用 ColorTranslator.ToOle

Chart.SerialsCollection(1).Point(1).Format.Fill.ForeColor.RGB = ColorTranslator.ToOle(Color.Red);

或者,输入RGB 值:

Chart.SerialsCollection(1).Point(1).Format.Fill.ForeColor.RGB = ColorTranslator.ToOle(Color.FromArgb(255, 0, 0);

一些额外的信息,所以我不只是重复 cmets:

ForeColor.RGB 可以用十六进制表示为0xBBGGRR (source)。知道了这一点,您可以创建以下函数:

public int Color_to_RGB(Color color) {
    return (color.B << 16) | (color.G << 8) | Color.R;
}

用途:

Chart.SerialCollection(1).Point(1).Format.Fill.ForeColor.RGB = Color_to_RGB(Color.Red);

另一个答案中使用的ToArgb() 的原因不起作用,因为它的十六进制表示是0xAARRGGBB

【讨论】:

    【解决方案2】:

    试试RGB属性ForeColor.RGB

    例如

    Chart.SerialsCollection(1).Point(1).Format.Fill.ForeColor.RGB = System.Drawing.Color.Red.ToArgb();
    

    【讨论】:

    • 是的,我已经试过了,它可以通过编译,但是颜色不正确。 Color.Red 显示为不同的颜色。我想是因为RGB和ARGB是两种不同的颜色系统吧?
    猜你喜欢
    • 1970-01-01
    • 2016-06-08
    • 2016-10-20
    • 2020-09-19
    • 2016-03-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多