为什么SSRS导出损坏的XLS文件?

时间:2014-09-12 16:23:38

标签: sql-server excel reporting-services

我在SQL Server 2012中有一个SSRS报告,该报告导出到Word和PDF,这些报告在各自的读者中打开。但是,当我在MS-Excel中打开XLS文件时,我收到消息,询问是否应该修复损坏的文件。如果我单击是,它将显示一个空文件,其中包含如下消息。我正在使用SQL Server 2012.这仅适用于某一天的数据。

Replaced Part: /xl/worksheets/sheet1.xml part with XML error.  Illegal xml character. Line 14, column 6935.

我想我必须研究这篇文章http://christianspecht.de/2014/01/14/excel-found-unreadable-content-when-exporting-a-reporting-services-report/

7 个答案:

答案 0 :(得分:11)

我有同样的问题,在我的情况下,这是数据精度的问题。显然SSRS无法处理18位小数,我的程序返回了一些字段的数据。这可能发生在您的情况下。特定日期的数据最终会得到一个由SSRS处理的小数位数过多的值。

一种选择是更改表中的数据类型以支持较低的精度。其他解决方案是转换填充报告的存储过程中的数字。

SELECT CONVERT(NUMERIC(38,8),MyNumber) AS MyNumber_v2

您可以详细了解此错误here

答案 1 :(得分:6)

我有百分比类型字段的类似问题。当数据输出中出现值0%时,报表导出到Excel生成的损坏文件。自动修复的Excel文件包含0.00000000000值而不是预期的0.00%。 DB中的初始字段数据类型为DECIMAL(24,14)。我将CONVERT到DECIMAL(10,7)子句添加到查询中,问题得到解决。

答案 2 :(得分:2)

在使用Oracle数据库从SSRS 2012导出为ex​​cel(xlsx格式)时,我遇到了类似的问题。但错误信息是"我们发现XYZ.xlsx中的某些内容存在问题,您是否希望我们尝试尽可能多地恢复?如果您信任此工作簿的来源,请单击是"。问题是由于其中一个字段中的不可打印字符。通过将SQL查询更改为使用正则表达式来解决该问题"选择column1,REGEXP_REPLACE(column2,' [^ [:print:]]','' )作为表"中的column2。基本上,正则表达式从column2中删除任何不可打印的字符。

答案 3 :(得分:1)

在以excel格式导出时遇到了同样的情况。在我的情况下,仔细查看报告输出,我发现输出中有非ASCII字符。我删除了非ASCII字符,然后excel导出工作正常。我使用以下函数从包含列中删除了非ASCII字符。

CREATE FUNCTION fnc_RemoveNonASCII 
(
@nstring nvarchar(255)
)
RETURNS varchar(255)
AS
BEGIN
DECLARE @Result varchar(255)
SET @Result = ''

DECLARE @nchar nvarchar(1)
DECLARE @position int

SET @position = 1
WHILE @position <= LEN(@nstring)
BEGIN
    SET @nchar = SUBSTRING(@nstring, @position, 1)
    --Unicode & ASCII are the same from 1 to 255.
    --Only Unicode goes beyond 255
    --0 to 31 are non-printable characters
    IF UNICODE(@nchar) between 32 and 255
        SET @Result = @Result + @nchar
    SET @position = @position + 1
END
RETURN @Result
END
GO

答案 4 :(得分:1)

我还遇到了同一问题,该问题是由嵌入式图像引起的。顺便说一句,我知道这个回复很晚,但是对于其他遇到类似SSRS报告问题的人来说,它可能会有些用处。特别是将报告导出到产生损坏的Excel .xls或.xlsx文件的位置。 我特殊问题的原因只是一个小的.JPEG图像后退按钮,但同样也可能是一个项目徽标图像,通常会出现在许多报表中。经过很多次追捕(从我的角度来看)许多小巷,因为腐败有多种原因。我的错误消息提到了drawing.xml的问题,该问题向我指出了嵌入式图像的方向。在数据中同样包含LF,CR或其他非ASCII字符也可能导致导出到Excel的数据中断。

如果将此代码段放在“可见性”-“隐藏”部分中 “ =(Globals!RenderFormat.IsInteractive = False)”在运行报表时仍会显示图像,但会阻止导出损坏。

答案 5 :(得分:0)

检查报表设计中的单元格(或列标题)字体(在报表生成器中)。 也许你的机器上不存在其中一个!

答案 6 :(得分:0)

我遇到了同样的问题,并且找到了根本原因。我的订阅每天都在重写同一文件,这会导致问题。在生成文件之前删除文件已解决了该问题。 希望对您有帮助