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)