如何在SSRS中替换字段里的点?表达式失效问题咨询
解决Report Builder中姓名字段替换'. .'和'..'的问题
我来帮你排查并解决这个问题,你遇到的情况大概率是这几个原因导致原表达式没生效:要么只处理了. .(点加空格加点)的情况,没覆盖..(连点);要么字段里的空格不是普通半角空格(比如全角空格、制表符这类空白字符);还有可能字段值为Null时ToString()的处理有问题。
下面是几个逐步递进的解决方案:
1. 先覆盖两种点的格式
先同时处理. .和..两种情况,把原表达式改成同时替换两种格式:
=Replace(Replace(Fields!MyField.Value.ToString(), ". .", ""), "..", "")
这个表达式会先把. .替换为空,再把剩下的..也替换掉,确保两种格式都被处理。
2. 处理非普通空格的情况
如果上面的表达式还是没效果,很可能字段里的空格不是普通半角空格(ASCII 32),比如是全角空格(ASCII 12288)或者其他空白字符。这时候可以用正则表达式把所有空白字符统一替换成普通空格,再处理点的格式:
=IIF(IsNothing(Fields!MyField.Value), "", Replace(Replace(System.Text.RegularExpressions.Regex.Replace(Fields!MyField.Value.ToString(), "\s", " "), ". .", ""), "..", ""))
这里的\s正则会匹配所有空白字符(包括空格、制表符、全角空格等),先统一换成普通空格,再替换目标内容,同时用IIF判断字段是否为空,避免Null值报错。
3. 排查空白字符的具体类型
如果还是不确定空格的类型,可以先临时加一个文本框,用下面的表达式查看字段中第二个字符的ASCII码(假设. .的结构是[点][空白][点]):
=Asc(Mid(Fields!MyField.Value.ToString(), 2, 1))
运行报表后,根据返回的ASCII码判断:
- 32 = 普通半角空格
- 12288 = 全角空格
- 9 = 制表符
知道具体编码后,也可以直接用Chr(编码)来精准替换,比如全角空格的情况:
=Replace(Fields!MyField.Value.ToString(), Chr(46) & Chr(12288) & Chr(46), "")
操作步骤
- 在Report Builder中选中需要修改的姓名字段文本框
- 右键选择「表达式」(Expression)
- 把上面的对应表达式粘贴进去,点击确定
- 预览报表查看效果
内容的提问来源于stack exchange,提问作者user1777929
相关产品推荐
相关产品推荐

