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

问题描述 投票:0回答:8

我在 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-unreaded-content-when-exporting-a-reporting-services-report/

sql-server excel reporting-services
8个回答
14
投票

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

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

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

您可以在此处阅读有关此错误的更多信息。


6
投票

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


2
投票

我在使用 Oracle 数据库从 SSRS 2012 导出到 Excel(xlsx 格式)时遇到了类似的问题。但错误消息是“我们发现 XYZ.xlsx 中的某些内容存在问题,您希望我们尝试尽可能恢复吗?如果您信任此工作簿的来源,请单击“是””。该问题是由于其中一个字段中的不可打印字符造成的。通过更改 SQL 查询以使用正则表达式“select column1, REGEXP_REPLACE(column2, '[^[:print:]]', '') as column2 from table”解决了该问题。基本上,正则表达式会从第 2 列中删除所有不可打印的字符。


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

1
投票

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

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


0
投票

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


0
投票

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


0
投票

我将小数点从 18,0 更新为 10,0,但这不是问题。我发现有些字段除以0。一旦我使用 IIf(varx = 0, 0, ) 解决了这些问题,我就能够摆脱这个错误。

© www.soinside.com 2019 - 2024. All rights reserved.