【问题标题】:VB.Net: Formatting ShapesVB.Net:格式化形状
【发布时间】:2017-04-27 17:10:40
【问题描述】:

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

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

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

我完成了安装 PowerPack 并添加 Imports Microsoft.VisualBasic.Powerpacks 的过程,但仍然无法更改形状的边框颜色。我这里还有什么需要做的吗?

theShape.borderColor = myColor.ToArgb

非常感谢任何和所有帮助!

【问题讨论】:

  • myColor = System.Drawing.Color.Red ?
  • @Hackerman 返回一个蓝色矩形。不知道为什么大声笑
  • @Hackerman yellow 返回浅蓝色
  • 你能从 RGB 属性构建成 excel.color msdn.microsoft.com/en-us/library/…

标签: excel vb.net colors shape msdn


【解决方案1】:

这里的问题是 Color.ToArgb() 返回格式为 AARRGGBB 的 ARGB 整数,但 Excel 需要格式为 BBGGRR 的 BGR 整数。

你得到一个蓝色的形状,因为当你调用 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)

【讨论】:

  • 很抱歉,该功能似乎不起作用。它适用于红色,但是当我将它传递给蓝色和黄色时,它变成蓝色到红色,黄色到浅蓝色
  • 我真的很感谢你的努力,我从来不知道这是怎么回事
  • @Bob : 如果你删除 And &amp;HFFFFFFFF 会怎样?
  • 红色仍然变成蓝色,黄色仍然变成浅蓝色。我觉得这样的事情很容易解决。我不能成为第一个遇到这个问题的人。我对 VB.Net 的了解非常少,哈哈
  • @Bob:然后:Return (CUInt(c.R) &lt;&lt; 0 Or CUInt(c.G) &lt;&lt; 8 Or CUInt(c.B) &lt;&lt; 16 Or CUInt(c.A) &lt;&lt; 24) And &amp;HFFFFFFFF? :我
猜你喜欢
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多