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:从单元格获取背景颜色的主要内容,如果未能解决你的问题,请参考以下文章