将ssrs 2008报告导出为ex​​cel时出错

时间:2013-02-11 10:04:59

标签: reporting-services ssrs-2008

我有一份报告返回大约90000行。但是当我从asp.net页面将它导出到excel时,会出现这个错误:
在呈现报告期间发生错误
但是同一报告已成功从报表服务器导出到Excel 如果我从网页传递更多参数以将记录数减少到100,那么我可以从网页本身将其导出到Excel。

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

[例外:在呈现报告期间发生错误。]    Microsoft.Reporting.WebForms.ServerReport.ServerUrlRequest(Boolean isAbortable,String url,Stream outputStream,String& mimeType,String& fileNameExtension)+574    Microsoft.Reporting.WebForms.ServerReport.InternalRender(Boolean isAbortable,String format,String deviceInfo,NameValueCollection urlAccessParameters,Stream reportStream,String& mimeType,String& fileNameExtension)+905    Microsoft.Reporting.WebForms.ServerReport.Render(String format,String deviceInfo,NameValueCollection urlAccessParameters,Stream reportStream,String& mimeType,String& fileNameExtension)+28    Microsoft.Reporting.WebForms.ServerReport.Render(String format,String deviceInfo,NameValueCollection urlAccessParameters,String& mimeType,String& fileNameExtension)+88    Microsoft.Reporting.WebForms.ServerReportControlSource.RenderReport(String format,String deviceInfo,NameValueCollection additionalParams,String& mimeType,String& fileExtension)+123    Microsoft.Reporting.WebForms.ExportOperation.PerformOperation(NameValueCollection urlQuery,HttpResponse response)+153    Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest(HttpContext context)+585    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+901    System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)+76

8 个答案:

答案 0 :(得分:2)

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

链接应包含以下内容:

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

答案 1 :(得分:2)

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

您是否从报告管理器中查看了导出的行数?除非您使用自定义或第三方工具允许导出到XLSX,否则该文件应该只有~65k行。

我认为报表管理器通过从报表中执行类似SELECT TOP 65k的操作来解决超出的行长度问题。您的asp.net界面可能没有考虑到这个限制,并且在Excel导出中强制输入太多行。

您的选择是:

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

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

3.。)考虑使用第三方或自定义解决方案来解决SSRS 2008导出限制(我知道Aspose。)

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

答案 2 :(得分:2)

正如dev_etter所提到的,SSRS 2008并不支持开箱即用的大型Excel报表,但可以使用SoftArtisans OfficeWriter等第三方工具来完成,它允许您在OOXML中设计和导出报表( .xlsx / .xlsm)格式。

免责声明:我为SoftArtisans工作

答案 3 :(得分:1)

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

ViewerControl.ServerReport.Timeout

http://msdn.microsoft.com/en-us/library/microsoft.reporting.winforms.serverreport.timeout(v=vs.80).aspx 因为报表服务器也使用ReportViewer控件,可能与您的控件不同。超时的默认值为600000毫秒。

顺便说一句:看到你的StackTrace会很棒。这将有助于为您提供更好的答案。

答案 4 :(得分:0)

服务器上的Ram可能是个问题。这里有很多问题,大量报告没有通过,ram似乎至少从回复中解决了这些问题。

答案 5 :(得分:0)

如果问题 超过exk的65k限制,您可以将父组添加到Tablix并为组表达式添加以下代码

=CEILING(RowNumber(Nothing)/65500)

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

这将在excel文件中为Tablix创建多个选项卡,即> 65500行...

答案 6 :(得分:0)

我的修复结果是删除了我们报告中的印章(图片)。我不确定这是否仅限于png,但是在删除之后,导出到excel的报告没有问题。

答案 7 :(得分:0)

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