VB.Net:格式化形状

VB.Net: Formatting Shapes

目标:填充形状和change/remove它的边框。

问题:填充的颜色与要求的相反(要求红色,填充为蓝色)。

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

非常感谢任何帮助!

这里的问题是 Color.ToArgb() returns 格式为 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)