代码之家  ›  专栏  ›  技术社区  ›  Bob

VB.Net:格式化形状

  •  0
  • Bob  · 技术社区  · 8 年前

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

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

    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
    

    非常感谢您的任何帮助!

    1 回复  |  直到 8 年前
        1
  •  1
  •   Visual Vincent    8 年前

    这里的问题是 Color.ToArgb() 返回以下格式的ARGB整数: AARRGGBB 但是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)