2013-02-11 248 views
2

我有一个返回大约90000行的报告。但是,当我将它从asp.net页面导出为ex​​cel时,它会给出此错误:
报告呈现期间发生错误
但是同一报告从报告服务器成功导出为ex​​cel。
如果我从网页传递更多参数以将记录数减少到100,那么我可以将它从网页本身导出为ex​​cel。将ssrs 2008报告导出为ex​​cel时出错

编辑-1
堆栈跟踪: [例外:有关此错误的详细信息导航到报表服务器的本地服务器计算机上,或启用远程错误]

[例外:发生错误呈现报表的过程中。] Microsoft.Reporting.WebForms.ServerReport.ServerUrlRequest(布尔isAbortable,字符串URL,流的OutputStream,字符串& mime类型,字符串& fileNameExtension)574 Microsoft.Reporting.WebForms.ServerReport.InternalRender(布尔isAbortable ,字符串格式,圣环deviceInfo,NameValueCollection中urlAccessParameters,流reportStream,字符串& mime类型,字符串& fileNameExtension)905 Microsoft.Reporting.WebForms.ServerReport.Render(字符串格式,字符串deviceInfo,NameValueCollection中urlAccessParameters,流reportStream,字符串& mime类型,字符串& fileNameExtension) 28 Microsoft.Reporting.WebForms.ServerReport.Render(字符串格式,字符串deviceInfo,NameValueCollection中urlAccessParameters,字符串& mime类型,字符串& fileNameExtension)88 Microsoft.Reporting.WebForms.ServerReportControlSource.RenderReport(字符串格式,字符串deviceInfo,NameValueCollection中additionalParams,字符串& mimeType,字符串& fileExtension)123 Microsoft.Reporting.WebForms.ExportOperation.PerformOperation(NameValueCollection中urlQuery,HttpResponse对象响应)153 Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest(HttpContext的上下文中)585 System.Web.CallHandlerExecutionStep.System.Web .HttpApplication.IExecutionStep.Execute()901 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔& completedSynchronously)76

回答

0

拉姆可能是一个问题。这里有很多问题,大量的报道没有通过,而ram似乎解决了这些问题,至少从答复中得到了解决。

+0

但是,报表服务器上还有另一个报表返回5倍多的行并将其成功导出到excel。 – Surinder 2013-02-11 12:23:12

+0

哇。这个人有更多的专栏或更复杂的查询吗? – glh 2013-02-11 20:08:25

+0

他们有相同的列数。我改变了一个参数来增加行数。 – Surinder 2013-02-12 06:20:24

1

也许有在ReportViewer控件超时错误? 尝试玩:

ViewerControl.ServerReport.Timeout 

http://msdn.microsoft.com/en-us/library/microsoft.reporting.winforms.serverreport.timeout(v=vs.80).aspx 由于报表服务器还具有不同的configaration与你使用ReportViewer控件和可能。超时的默认值是600000毫秒。

顺便说一句:很高兴看到你的StackTrace。这将有助于给你更好的答案。

+0

它不应该超时,因为报告显示在网页中没有任何错误。我得到的错误是当我将它导出为ex​​cel。我在问题中添加了错误的堆栈跟踪。 – Surinder 2013-02-11 10:56:07

+0

@Surinder你可以通过转到最后一页来查看。由于ssrs 2008只能一次执行每个页面,所以这是检查的唯一方法。 – glh 2013-02-11 11:13:56

+0

@glh我去了报告的最后一页,网页没有超时错误。我生成报告的csv文件没有任何错误,但导出到Excel导致错误“报告呈现期间发生错误”,如上面在我的问题中所述。如果我从报告服务器本身导出此报告,则不存在任何格式的问题。 – Surinder 2013-02-13 11:21:13

2

我可以建议你一些解决方法:在报告中,你可以放置一个链接到强制SSRS报告创建一个文件,而不是在屏幕上呈现。

链接应包含以下内容:在服务器上

http://localhost/ReportServer/Pages/ReportViewer.aspx? 
%2fSample+Report&rs:Format=excel 
+0

报告在屏幕上正确显示。当我将该报告导出为Excel格式时出现此错误 – Surinder 2013-02-11 12:22:40

+0

您能否显示您使用的完整链接? – 2013-02-11 12:27:51

+0

@Surinder,asp.net呈现屏幕上的内容以获得良好效果Gil建议将删除此步骤,直接向报表服务器请求,屏幕只显示你想要的东西,当你需要的时候,每个页面都会在请求时单独渲染,通过查看器控制输出到excel,立即请求alk,并可能超时 – glh 2013-02-12 12:03:28

2

SSRS 2008只能导出到XLS(MS Office 2003)。 XLS files are limited to 65k rows

你看过报表管理器中输出的行数吗?除非您使用自定义或第三方工具来允许导出到XLSX,否则该文件应该只有约65k行。

我认为报表管理器通过执行基本上类似于报表中的SELECT TOP 65k的东西来解决超出的行长度。你的asp.net接口可能没有考虑到这个限制,并且迫使太多的行进入Excel导出。

的选项有:

1)使用SSRS 2012,它允许出口XLSX。 XLSX文件可以处理更多的行。

2.)在导出到XLS之前,更改您的asp.net代码以切断前65k行。

3)考虑第三方或定制的解决方案来解决SSRS 2008年出口限制(我知道的Aspose。)

4)导出为CSV,然后让最终用户转换成CSV Excel中。

2

正如dev_etter提到,SSRS 2008不支持这么大的Excel报表开箱即用,但它可以用第三方工具来完成像SoftArtisans OfficeWriter它允许你设计并在OOXML格式(.xlsx/.XLSM出口报告)格式。

声明:我SoftArtisans

0

如果问题超过65K的限制Excel中的工作,你可以父组添加到您的表矩阵,并添加以下代码组表达

=CEILING(RowNumber(Nothing)/65500) 

然后添加一个分页符组的每个实例之间...

这将在为表矩阵的Excel文件,这些是> 65500行创建多个标签...

0

我的修复竟然是在我们的报告中删除封条(图片)。我不确定这是否仅限于png's,但在删除之后导出为ex​​cel的报告没有问题。

0

在SSRS 2014中导出具有分层连接类型查询的Oracle SSRS报表时,出现此问题。报表显示,但速度超出我的预期。我想知道它是否在后台超时,但仍显示一些行。我将报告更改为永不超时,并修复了它。在此之后花费更长时间运行,但它完成后会导出为ex​​cel。