ssrs报告导出到excel - 损坏的超链接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ssrs报告导出到excel - 损坏的超链接相关的知识,希望对你有一定的参考价值。
我有大型报告,每行包含超链接。
包含50k或更多行的报告将导出为excel。
导出后我尝试打开xlsx文件并收到消息,告诉我该文件包含错误。它还建议进行文件恢复
恢复后消息显示已删除超链接。我可以打开文件,但链接不再有效。
我试图用c#openxml sdk库打开导出的文件,并收到错误消息,告诉该文件包含不完整的元素,但我无法找到它是哪个元素
但是,当报告的行少于49k时,导出的文件将成功打开,并且所有超链接都在起作用。当报告导出为pdf或doc时,超链接也正常工作我使用报告服务器vesion 12.0.2269.0
有谁知道如何解决这个问题?
通常,当我从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,但这可能不是任何简单的选项,或者根本不是选项。通常,我只将其视为报表订阅的选项,而不是开发工具中的选项。
祝你好运!
将SSRS报告导出到Excel时,我也遇到了这个问题。我的理由是Excel只能处理66530个超链接 -
如果你在超过50k的时候得到这个问题再次确认(在这种情况下原因可能是R Richards建议的那样),或者如果它是66530链接导致电子表格中断。
我没有找到解决这个Excel限制的方法,所以我能想到解决这个问题的唯一方法是根本不在导出的excel文件中有超链接。
如果您可以在导出的文件中没有超链接,则可以使用SSRS报告的Globals!RenderFormat属性在报告中禁用它们。如果请求的格式是EXCEL,则在单元格上使用的表达式没有超链接将是 -
=IIF(Globals!RenderFormat.Name="EXCELOPENXML" ,True,False)
以上是关于ssrs报告导出到excel - 损坏的超链接的主要内容,如果未能解决你的问题,请参考以下文章