ssrs报告导出到excel - 损坏的超链接

问题描述 投票:1回答:2

我有大型报告,每行包含超链接。

包含50k或更多行的报告将导出为ex​​cel。

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

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

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

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

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

excel reporting-services hyperlink export
2个回答
1
投票

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

为了解决这种情况,我在SQL Server中创建了一个用户定义函数(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

如果您报告的超链接中有任何异常,则可能会删除该超链接。如果要从各种数据构建超链接,则可能需要擦除部分或全部字段。这是你必须经历一些试验和错误的事情。

其他时候,当我遇到这个问题时,RDL中有一个表达式,最终计算为NaN或Infinity。导出后的Excel文件似乎存在问题,除非导出到旧版本的Excel,如2003。

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

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

关于这种类型的东西有很多关于SO的好解决方案的问题,所以我不会在这里列出一堆与数据检查相关的表达式。

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

祝你好运!


0
投票

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

https://support.office.com/en-us/article/Excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3#ID0EBABAAA=2016,_2013

如果你在超过50k的时候得到这个问题再次确认(在这种情况下原因可能是R Richards建议的那样),或者如果它是66530链接导致电子表格中断。

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

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

=IIF(Globals!RenderFormat.Name="EXCELOPENXML" ,True,False)
© www.soinside.com 2019 - 2024. All rights reserved.