s-s-rS:从单元格获取背景颜色

Posted

技术标签:

【中文标题】s-s-rS:从单元格获取背景颜色【英文标题】:s-s-rS: Get backgroundcolor from Cell 【发布时间】:2013-11-07 11:28:51 【问题描述】:

我有一个表格形式的报告。我想为每一列设置一个随机的背景色。

为此我创建了一个自定义脚本:

Public Function GetColor()

    Dim intHighNumber AS Decimal = 255
    Dim intLowNumber AS Decimal = 100

    Dim NewColor AS String
    Dim Red AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber)
    Dim Green AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber)
    Dim Blue AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber)


    NewColor = "#" & Hex(Red) & Hex(Green) & Hex(Blue)

    Return NewColor
End Function

在第一个单元格中,我将填充表达式设置为:=code.GetColor() 直到这里它工作完美,但现在我希望列的其余部分使用相同的颜色......所以我输入了表达式“=Fields!myField.BackgroundColor”,但这不起作用......

我不知道如何解决这个问题...

非常感谢您的帮助:-)

【问题讨论】:

这是未经测试的......但由于报告引擎通常从左到右从上到下写入,您可以在自定义代码函数上方存储 LastColorUsed 公共变量。在您的自定义代码中创建一个名为 LastColorUsed() 的函数,该函数返回最后使用的颜色变量。这样,您可以将表达式编写为随机的或使用的最后一种颜色。 【参考方案1】:

您需要做的是记住列的颜色设置,以便您可以在页眉、页脚等中重复使用它。我们可以通过一个数组来实现这一点,该数组在第一次调用时返回一种新颜色,并且该颜色与该颜色相同如果之前指定了该颜色,则为索引。

这是自定义代码:

Dim Colors(0 to 9) As String

Function GetColor(Color As Integer) As String
  Dim intHighNumber AS Decimal = 255 
  Dim intLowNumber AS Decimal = 100 
  Dim ThisColor AS String 

  if (Colors(Color) <> "") Then
    ThisColor = Colors(Color) 
  else 
    Dim Red AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) 
    Dim Green AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) 
    Dim Blue AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) 
    ThisColor = "#" & Hex(Red) & Hex(Green) & Hex(Blue) 
    Colors(Color) = ThisColor
  End If 

  Return ThisColor 
End Function

然后在您的单元格中,您只需调用GetColor 函数,传递您希望单元格具有的颜色索引号。例如,第一列的页眉、详细信息和页脚单元格的BackgroundColor 属性表达式都是:

=Code.GetColor(0)

然后您只需为每列使用不同的颜色索引。

确保为数组指定足够的空间来存储所有颜色(或者,如果您想使用动态数组,也可以在每次添加新颜色时 ReDim 数组)。

【讨论】:

【参考方案2】:
Private string _LastColorUser="" 

Public Function LastColorUsed()
  Return _LastColorUsed
End Function

Public Function GetColor()

    Dim intHighNumber AS Decimal = 255
    Dim intLowNumber AS Decimal = 100

    Dim NewColor AS String
    Dim Red AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber)
    Dim Green AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber)
    Dim Blue AS Decimal = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber)


    NewColor = "#" & Hex(Red) & Hex(Green) & Hex(Blue)

    _LastColorUser=NewColor;  

    Return NewColor
End Function

【讨论】:

感谢您的回答,但这不起作用,我得到了几个单元格的不同颜色。整个列不一样。【参考方案3】:

@Chris 谢谢你,这是我需要的。 因为我的列是动态的,所以我不得不编写另一个函数来获取一个数字:

Public Function GetColumnNumber(ByVal parameter as Parameter,ByVal SSID As String) as String
      For i as integer = 0 to parameter.Count-1
         If CStr(parameter.Value(i)) = SSID THEN
          Return i
         END IF
      Next
End Function

在牢房里我写了这个:

=code.GetColor(code.GetColumnNumber(Parameters!SSID,Fields!SSID.Value))

再次感谢:)

【讨论】:

以上是关于s-s-rS:从单元格获取背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

s-s-rS 字段表达式更改单元格的背景颜色

s-s-rS 单元格格式

Java从Apache poi获取excel单元格背景颜色

s-s-rS 根据背景颜色设置字体颜色

Vanilla JS 从单元格中获取最低值并更改背景颜色

在pandas read_excel中获取Excel单元格背景颜色?