VB.Net:格式化形状

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

问题:它被填充的颜色变得相反要求(要求红色,它充满蓝色)。

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()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(cR) << 0 Or CUInt(cG) << 8 Or CUInt(cB) << 16) And &HFFFFFFFF End Function 

用法:

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