目标:填写形状并更改/删除其边框。
问题:它所填充的颜色正在成为相反的要求(要求红色,它充满蓝色)。
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
非常感谢任何和所有帮助!
答案 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)