3

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

Edit-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(字符串格式,字符串 deviceInfo,NameValueCollection urlAccessParameters,字符串& mimeType,字符串&fileNameExtension)+88 Microsoft.Reporting.WebForms.ServerReportControlSource.RenderReport(字符串格式,字符串 deviceInfo,NameValueCollection AdditionalParams,String& mimeType,String&fileExtension)+123 Microsoft.Reporting.WebForms.ExportOperation.PerformOperation(NameValueCollection urlQuery,HttpResponse 响应)+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) +76ExportOperation.PerformOperation(NameValueCollection urlQuery, HttpResponse 响应) +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) +76ExportOperation.PerformOperation(NameValueCollection urlQuery, HttpResponse 响应) +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

4

8 回答 8

2

SSRS 2008 只能导出到 XLS (MS Office 2003)。XLS 文件限制为 65k 行

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

我认为报告管理器通过从报告中执行基本上类似于 SELECT TOP 65k 的操作来解决超出的行长度。您的 asp.net 界面可能没有考虑到此限制,并且将太多行强制导入 Excel 导出。

您的选择是:

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

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

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

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

于 2013-02-11T19:39:16.337 回答
2

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

免责声明:我为 SoftArtisans 工作

于 2013-02-26T15:06:43.767 回答
2

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

该链接应包含以下内容:

http://localhost/ReportServer/Pages/ReportViewer.aspx?
%2fSample+Report&rs:Format=excel
于 2013-02-11T11:08:20.317 回答
1

ReportViewer 控件中是否存在超时错误?尝试玩:

ViewerControl.ServerReport.Timeout

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

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

于 2013-02-11T10:17:47.173 回答
0

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

=CEILING(RowNumber(Nothing)/65500)

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

这将在 excel 文件中为大于 65500 行的 tablix 创建多个选项卡...

于 2013-10-17T01:58:43.740 回答
0

服务器上的 Ram 可能是个问题。这里有很多问题,大量报告没有通过,ram 似乎可以解决这些问题,至少从响应来看。

于 2013-02-11T11:17:19.423 回答
0

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

于 2017-06-28T16:29:54.820 回答
0

我的解决办法是去掉我们报告上的印章(图片)。我不确定这是否仅限于 png,但在它被删除后,报告导出到 excel 没有问题。

于 2016-02-11T22:19:04.460 回答