SSRS导出CSV时出现多余双引号问题及解决咨询
解决SSRS导出CSV时部分记录被附加额外双引号的问题
这个问题其实是CSV格式的标准规则在起作用——当你的合并字段里包含逗号(CSV默认的字段分隔符)时,SSRS为了避免CSV解析工具把这个逗号当成字段分隔符,会自动用双引号把整个字段包裹起来。你看第三条记录的合并结果是IJK#123, 7th Ave#Chicago#IL,里面的逗号就是触发这个行为的原因。
下面给你几个可行的解决办法:
方法1:替换合并字段里的逗号
最简单的方式就是把表达式里用来连接BuildingNumber和StreetName的逗号换成其他不会触发CSV规则的符号,比如空格、斜杠或者短横线。
修改你的表达式,把"\,"改成你需要的符号(比如空格):
=Fields!SCode.Value & "#" & IIF(IsNothing(Fields!BuildingNumber.Value), Fields!StreetName.Value, Fields!BuildingNumber.Value & " " & Fields!StreetName.Value) & "#" & Fields!City.Value & "#" & Fields!State.Value
这样第三条记录的合并结果就变成IJK#123 7th Ave#Chicago#IL,没有逗号,导出CSV时就不会被双引号包裹了。
方法2:调整SSRS CSV导出的限定符设置
如果你必须保留逗号,可以修改SSRS的CSV导出选项,把默认的双引号限定符去掉:
- 在报表的导出界面,选择CSV格式后,点击「导出选项」(Export Options)
- 找到「Qualifier」(限定符)设置,把默认的
"改成空字符串 - 确认后导出,这样所有字段都不会被自动添加双引号
⚠️ 注意:这个方法有风险,如果你的数据里其他字段也包含逗号,CSV解析工具可能会把这些逗号当成字段分隔符,导致数据错位,所以只适合确定所有合并后内容里的逗号不会影响解析的场景。
方法3:自定义代码转义逗号
如果需要保留逗号同时又不想让SSRS自动加引号,可以在报表里添加自定义代码,把逗号转义成非分隔符格式:
- 打开报表的「报表属性」(Report Properties)
- 切换到「代码」(Code)标签,添加以下VB函数:
Public Function EscapeComma(ByVal input As String) As String If input Is Nothing Then Return "" Return Replace(input, ",", "\,") End Function
- 修改你的表达式,调用这个函数处理
StreetName:
=Fields!SCode.Value & "#" & IIF(IsNothing(Fields!BuildingNumber.Value), Code.EscapeComma(Fields!StreetName.Value), Fields!BuildingNumber.Value & "\," & Code.EscapeComma(Fields!StreetName.Value)) & "#" & Fields!City.Value & "#" & Fields!State.Value
这样逗号被转义成\,,导出CSV时就不会触发自动加引号的规则,后续解析CSV时再把\,转回到逗号即可。
内容的提问来源于stack exchange,提问作者Julaayi
相关产品推荐
相关产品推荐

