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)
目标:填充形状和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)