VB.Net:格式化形状

时间:2016-12-12 18:52:54

标签: excel vb.net colors shape msdn

目标:填写形状并更改/删除其边框。

问题:它所填充的颜色正在成为相反的要求(要求红色,它充满蓝色)。

myColor = System.Drawing.Color.Blue

Dim theShape As Microsoft.Office.Interop.Excel.Shape = xlWorkSheet.Shapes.AddShape(MsoAutoShapeType.msoShapeRectangle, (xlWorkSheet.Cells(theRow, theColumn)).Left, (xlWorkSheet.Cells(theRow, theColumn)).Top, 25, 14)

theShape.Fill.ForeColor.RGB = myColor.ToArgb()

另外,为了更改边框,我发现了这个...... https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.powerpacks.shape.bordercolor.aspx

我经历了安装PowerPacks并添加Imports Microsoft.VisualBasic.Powerpacks的过程,但它仍然没有让我能够改变我的形状的边框颜色。我还需要做些什么吗?

theShape.borderColor = myColor.ToArgb

非常感谢任何和所有帮助!

1 个答案:

答案 0 :(得分:1)

这里的问题是Color.ToArgb()返回格式为AARRGGBB的ARGB整数,但Excel需要一个BGR整数,其格式为BBGGRR

你得到一个蓝色的形状,因为当你打电话给Color.Red.ToArgb()时,它会像这样打包一个ARGB整数:

255 (Alpha) | 255 (Red) | 0 (Green) | 0 (Blue)

但Excel将其解释为:

255 (Blue) | 0 (Green) | 0 (Red)

要修复它,你必须将颜色转换为BGR整数而不是ARGB整数。

这个功能可以解决问题:

Public Function ToBgr(ByVal c As Color) As Long
    Return (CUInt(c.R) << 0 Or CUInt(c.G) << 8 Or CUInt(c.B) << 16) And &HFFFFFFFF
End Function

<强>用法:

theShape.Fill.ForeColor.RGB = ToBgr(myColor)