ssrs报告导出到excel-断开的超链接

ssrs报告导出到excel-断开的超链接,excel,reporting-services,hyperlink,export,Excel,Reporting Services,Hyperlink,Export,我有一个大报告,每一行都包含超链接 包含50k或更多行的报表将导出到excel 导出后,我尝试打开xlsx文件,并得到消息告诉我该文件包含错误。它还建议进行文件恢复 “恢复后”消息显示超链接已删除。我可以打开文件,但链接不再工作 我试图用c openxml sdk库打开导出的文件,收到错误消息,告诉我该文件包含不完整的元素,但我找不到它是哪个元素 但是,当报表的行数少于49k时,导出的文件将成功打开,所有超链接都正常工作。 当报表导出为pdf或doc时,超链接也会起作用 我使用报表服务器vesi

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

包含50k或更多行的报表将导出到excel

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

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

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

但是,当报表的行数少于49k时,导出的文件将成功打开,所有超链接都正常工作。 当报表导出为pdf或doc时,超链接也会起作用 我使用报表服务器vesion 12.0.2269.0


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

通常,当我在从SSRS导出Excel文件后遇到此类问题时,我会发现数据中存在Excel有问题的地方。也许是一个隐藏的角色。导出工作正常,问题开始时打开文件

为了处理这种情况,我在SQLServer中创建了一个用户定义的函数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
您可以根据自己的需要以任何方式进行调整。这可以满足我的需要,也就是删除文本字段中的所有奇怪字符,开发团队认为这些字符可以用于前端应用程序的格式化

用法:

从表1中选择dbo.udf_cleandatfield1作为CleanField1

如果您正在报告的超链接中有任何异常,这可能会将其删除。如果要从各种数据块构建超链接,可能需要清除部分或全部字段。这是你必须经历一些尝试和错误的地方

其他时候,当我遇到这个问题时,RDL中有一个表达式最终计算为NaN或无穷大。导出后的Excel文件似乎对此有问题,但导出到旧版本的Excel(如2003)时除外

处理这种情况的最佳方法是调整表达式以检查最终值可能不正常的可能性,并将该值默认为其他值,或将该值四舍五入为合理值。这类似于在除法之前检查分母是否为零

=iiffeelds!总计。值>0,字段!Count.Value/Fields!总值,0

关于这类问题,这里有很多问题都有很好的解决方案,所以我不会在这里列出一系列与数据检查相关的表达式

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


祝你好运

我在将SSRS报告导出到Excel时也遇到了这个问题。我的理由是Excel只能处理66530个超链接-

再次确认,如果您在超过50k的时候发现此问题,那么原因可能是R Richards建议的,或者是66530个链接导致电子表格中断

我还没有找到一种方法来绕过Excel的这个限制,所以我能想到的解决这个问题的唯一方法就是在导出的Excel文件中根本没有超链接

如果导出的文件中没有超链接,您可以在报告中使用Globals禁用它们!SSRS报告的RenderFormat属性。如果请求的格式为EXCEL,则用于不包含超链接的单元格的表达式应为-

=IIF(Globals!RenderFormat.Name="EXCELOPENXML" ,True,False)