2013-02-11 227 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。