SSRS报表字段格式处理需求:双颜色格式转换与单颜色展示
解决SSRS中颜色字段的格式转换问题
嘿,针对你遇到的SSRS颜色字段格式转换需求,我整理了几种常见场景的解决方案,你可以根据自己的实际字段格式调整:
首先得明确:你提到双颜色格式是移除HTML标签后的内容,那大概率是有规律的——要么是用分隔符区分两个颜色,要么是颜色名直接拼接,或是残留了old/new这类标识。下面分情况说明:
场景1:双颜色用分隔符区分(比如Black|Blue、Black,Blue)
如果你的双颜色字段是用某个符号(比如|)分隔两个颜色,直接用Split函数拆分再拼接就行,表达式如下:
=IIF(InStr(Fields!ColorField.Value, "|") > 0, "OLD color = " & Split(Fields!ColorField.Value, "|")(0) & " / New color = " & Split(Fields!ColorField.Value, "|")(1), Fields!ColorField.Value)
小说明:
InStr(...) > 0用来判断字段里是否包含分隔符,有就按双颜色格式处理Split会把字段值拆成数组,第一个元素取作旧颜色,第二个取作新颜色- 单颜色场景下直接返回原字段内容即可
场景2:双颜色是颜色名直接拼接(比如BlackBlue)
这种情况需要先明确你用到的颜色列表,比如常见的Black、Blue、Red这些。如果颜色种类不多,可以直接枚举所有可能的组合:
=IIF( Fields!ColorField.Value Like "*Black*Blue*" Or Fields!ColorField.Value Like "*Blue*Black*" Or Fields!ColorField.Value Like "*Red*Green*" Or Fields!ColorField.Value Like "*Green*Red*", Switch( Fields!ColorField.Value = "BlackBlue", "OLD color = Black / New color = Blue", Fields!ColorField.Value = "BlueBlack", "OLD color = Blue / New color = Black", Fields!ColorField.Value = "RedGreen", "OLD color = Red / New color = Green", Fields!ColorField.Value = "GreenRed", "OLD color = Green / New color = Red" ), Fields!ColorField.Value )
如果颜色种类较多,用正则表达式会更高效,SSRS支持调用.NET的正则类,表达式如下:
=IIF(System.Text.RegularExpressions.Regex.IsMatch(Fields!ColorField.Value, "^(Black|Blue|Red|Green){2}$"), "OLD color = " & System.Text.RegularExpressions.Regex.Match(Fields!ColorField.Value, "^(Black|Blue|Red|Green)").Value & " / New color = " & System.Text.RegularExpressions.Regex.Match(Fields!ColorField.Value, "(Black|Blue|Red|Green)$").Value, Fields!ColorField.Value)
特殊情况:双颜色带old/new标识(比如oldBlacknewBlue)
如果移除HTML标签后字段里还残留着old、new这类标识,那可以按这些关键词拆分处理:
=IIF(InStr(Fields!ColorField.Value, "old") > 0 And InStr(Fields!ColorField.Value, "new") > 0, "OLD color = " & Replace(Split(Fields!ColorField.Value, "new")(0), "old", "") & " / New color = " & Split(Fields!ColorField.Value, "new")(1), Fields!ColorField.Value)
你只需要根据自己字段的实际格式,把上面的分隔符、颜色列表、关键词替换成真实内容就可以啦~
内容的提问来源于stack exchange,提问作者Jfung




