ssrs报告导出为ex​​cel – 破坏的超链接

我有大的报告,每一行都包含超链接。

包含50k或更多行的报告被导出到excel。

导出后,我尝试打开xlsx文件,并得到消息告诉我,该文件包含错误。 它也build议做文件恢复

恢复消息显示超链接已被删除。 我可以打开文件,但链接不再工作。

我试图用c#openxml sdk库打开导出的文件,并得到错误消息告诉该文件包含不完整的元素,但我无法find它是哪个元素

但是,当报表less于49k行时,导出的文件将成功打开,并且所有超链接都正常工作。 当报告导出到PDF或DOC,超链接也工作我使用报告服务器vesion 12.0.2269.0

有谁知道如何解决这个问题?

通常,在从SSRS导出Excel文件后遇到这类问题时,我发现Excel中存在一些问题。 一个隐藏的angular色,也许。 导出工作,打开文件是问题开始的时候。

为了处理这种情况,我在SQL Server中创build了一个用户定义的函数(UDF)来删除我知道Excel将会窒息的任何字符。 以下是我使用的一个例子。

CREATE FUNCTION [dbo].[udf_CleanData] ( @data text ) RETURNS varchar(max) AS BEGIN DECLARE @cdata varchar(max) = @data SELECT @cdata = REPLACE(@cdata, char(20), '') -- double quote SELECT @cdata = REPLACE(@cdata, char(21), '') -- bullet SELECT @cdata = REPLACE(@cdata, char(13), '') -- carriage return SELECT @cdata = REPLACE(@cdata, char(10), '') -- line feed SELECT @cdata = REPLACE(@cdata, char(18), '') -- single quote right SELECT @cdata = REPLACE(@cdata, char(17), '') -- single quote left SELECT @cdata = REPLACE(@cdata, char(22), '') -- dash RETURN @cdata END 

您可以根据自己的需要调整此方法。 这适用于我所需要的,那就是删除开发团队认为在前端应用程序上用于格式化的文本字段中的所有奇怪字符。

用法:

SELECT dbo.udf_CleanData(Field1) AS CleanField1 FROM Table1

如果您正在报告的超链接有任何不寻常的内容,这可能会删除。 如果您正在构build各种数据的超链接,则可能需要清理部分或全部字段。 这是你必须经历一些试验和错误的地方。

其他时候,当我遇到这个问题时,RDL中有一个expression式,最终计算为NaNInfinity 。 导出后的Excel文件似乎有问题, 除了导出到旧版本的Excel,如2003年。

处理这种情况的最好办法是调整你的expression式,以检查最终值可能会失控,并将值默认为其他值,或者将值舍入到合理的值。 这与在分割之前检查分母不为零是类似的。

=IIf(Fields!Total.Value > 0, Fields!Count.Value/Fields!Total.Value, 0)

这里有很多关于这种types的问题的解决scheme,所以我不会在这里列出一些与数据检查有关的expression式。

处理这种情况的另一种方法是始终导出到早期版本的Excel,但这可能不是一个简单的选项,或者根本就不是一个选项。 通常情况下,我只能将其看作报表订阅的一个选项,而不能用于开发工具。

祝你好运!