SSRS导出文本文件时去除双引号问题及代码排查
SSRS导出TEXT文件时移除带逗号字段的双引号问题解决
现有自定义代码的问题
- 命名空间错误:
Microsoft.ReportingServices.ReportRendering属于报表渲染扩展开发的专用命名空间,不适用于报表自定义代码的运行环境,导致Report.RenderFormat无法正确获取当前渲染格式。 - 逻辑无效:双引号是SSRS在导出TEXT格式时自动添加的,此时传入函数的
input参数中并不包含双引号,所以Replace操作找不到目标内容,自然无法生效。
解决方法
方法一:修改SSRS服务器的TEXT渲染配置(全局生效)
需要服务器管理员权限,修改后所有导出TEXT格式的报表都会取消自动加双引号:
- 找到SSRS服务器上的
RSReportServer.config文件(默认路径:C:\Program Files\Microsoft SQL Server Reporting Services\SSRS\ReportServer) - 定位到
<Render>节点下的<Extension Name="TEXT" ...>配置块,添加或修改Qualifier属性为空:
<Extension Name="TEXT" Type="Microsoft.ReportingServices.Rendering.CsvRenderer.CsvReport,Microsoft.ReportingServices.CsvRendering"> <Configuration> <DeviceInfo> <Qualifier></Qualifier> <!-- 取消自动添加双引号 --> <FieldDelimiter>,</FieldDelimiter> <!-- 保持逗号作为字段分隔符 --> </DeviceInfo> </Configuration> </Extension>
- 重启SSRS服务使配置生效。
方法二:导出时通过URL参数指定(单报表临时生效)
如果没有服务器权限,可以在导出TEXT格式时,通过URL参数强制取消双引号:
在报表导出的URL末尾添加:&rc:Qualifier=
示例:
http://your-ssrs-server/ReportServer?/YourReport&rs:Command=Render&rs:Format=TEXT&rc:Qualifier=
方法三:报表层面自定义处理(无服务器权限,需调整字段输出)
如果上述方法都无法使用,可以通过修改字段表达式,让SSRS识别不到需要加引号的场景:
- 打开报表设计器,选中目标字段的占位符
- 将表达式修改为:
=IIF(Globals!RenderFormat.Name = "TEXT", Replace(Fields!NAME.Value, ",", Chr(160) & "," & Chr(160)), Fields!NAME.Value)
这里用**非断空格(Chr(160))**包裹逗号,让SSRS认为这不是分隔符,从而不添加双引号。导出后如果需要纯逗号,可以再用文本编辑器批量替换非断空格为空(如果银行格式允许非断空格则无需此步骤)。
内容的提问来源于stack exchange,提问作者Wen
相关产品推荐
相关产品推荐

