2012-07-02

SQL Server 2012 SSRS 2012:Reporting Services 支援 xlsx、docx 檔案格式;不再有 xls 檔案受限於最大資料列: 65536 之問題



感謝 Alex Chuo 的通知:SSRS 2012:Reporting Services 支援 xlsx、docx 檔案格式;不再有 xls 檔案受限於最大資料列: 65536 之問題。




適用環境:
SQL Server 2012 版本。
Reporting Services 2012。

在 SQL Server 2012 Reporting Services 中,預設 Excel 轉譯器是與 Microsoft Excel 2007-2010 相容的版本。

在報表管理員和 SharePoint 清單的 [匯出] 功能表中,這就是 [Excel] 選項。

使用新版本 Excel 2007-2010 轉譯延伸模組有許多優點。

下表將比較 Excel 2003 與 Excel 轉譯器。

-- 00_使用新版本 Excel 2007-2010 轉譯延伸模組



改用新版本的 Excel 2007-2010(*.xlsx) 轉譯延伸模組:

(1) 可支援到 1,048,576 筆資料列。
(2) 可支援到 16,384 資料行。

也就是說,Excel 2007-2010 讓試算表的容量擴充到超過 1 百萬資料列和 1 萬 6 千資料行。





以下為使用 SSRS 2012 版本的畫面:

-- 01_SSRS_2012_檢視報表_另存新檔



-- 02_SSRS_2012_開啟或儲存Excel



-- 03_SSRS_2012_另存新檔_只能選xlsx



-- 04_SSRS_2012_超過65,536 列筆資料列







以下為使用 SSRS 2008 R2 版本的畫面:

-- 05_SSRS_2008_R2_檢視報表_另存新檔




但若是匯出的資料列筆數超過 65536,將會遭遇的錯誤訊息如下:

-- 06_SSRS_2008_R2_超過最大資料列_65536



'/Reports' 應用程式中發生伺服器錯誤。
--------------------------------------------------------------------------------

Excel 轉譯延伸模組 : 列數超過這種格式每個工作表的最大資料列限制; 需要的資料列: 113446,最大資料列: 65536 
描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。 

例外詳細資訊: Microsoft.Reporting.WebForms.ReportServerException: Excel 轉譯延伸模組 : 列數超過這種格式每個工作表的最大資料列限制; 需要的資料列: 113446,最大資料列: 65536

原始程式錯誤: 

在執行目前 Web 要求期間,產生未處理的例外狀況。如需有關例外狀況來源與位置的資訊,可以使用下列的例外狀況堆疊追蹤取得。  

堆疊追蹤: 

[ReportServerException: Excel 轉譯延伸模組 : 列數超過這種格式每個工作表的最大資料列限制; 需要的資料列: 113446,最大資料列: 65536]

[ReportServerException: Excel 轉譯延伸模組 : 列數超過這種格式每個工作表的最大資料列限制; 需要的資料列: 113446,最大資料列: 65536 (rrRenderingError)]
   Microsoft.Reporting.WebForms.ServerReport.ServerUrlRequest(Boolean isAbortable, String url, Stream outputStream, String& mimeType, String& fileNameExtension) +1018
   Microsoft.Reporting.WebForms.ServerReport.InternalRender(Boolean isAbortable, String format, String deviceInfo, NameValueCollection urlAccessParameters, Stream reportStream, String& mimeType, String& fileNameExtension) +1329
   Microsoft.Reporting.WebForms.ServerModeSession.RenderReport(String format, Boolean allowInternalRenderers, String deviceInfo, NameValueCollection additionalParams, Boolean cacheSecondaryStreamsForHtml, String& mimeType, String& fileExtension) +209
   Microsoft.Reporting.WebForms.ExportOperation.PerformOperation(NameValueCollection urlQuery, HttpResponse response) +219
   Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest(HttpContext context) +171
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +599
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171

--------------------------------------------------------------------------------
版本資訊: Microsoft .NET Framework 版本:2.0.50727.4927; ASP.NET 版本:2.0.50727.4927 






匯出至 Microsoft Excel (報表產生器及 SSRS)

在 SQL Server 2012 Reporting Services 中,預設 Excel 轉譯器是與 Microsoft Excel 2007-2010 相容的版本。

在報表管理員和 SharePoint 清單的 [匯出] 功能表中,這就是 [Excel] 選項。

與 Excel 2003 相容的舊版現在已命名為 Excel 2003,而且使用該名稱列於功能表上。
根據預設,系統不會顯示 [Excel 2003] 功能表選項,但是管理員可以透過更新 RSReportServer 組態檔,顯示此選項。

若要使用 Excel 2003 轉譯器,從 SQL Server Data Tools (SSDT) 匯出報表,請更新 RSReportDesigner 組態檔。

不過,讓 Excel 2003 轉譯器顯示並不適用於所有案例。
因為 RSReportServer 組態檔位於報表伺服器上,所以您從中匯出報表的工具或產品必須連接至報表伺服器,以便讀取組態檔。

如果您在中斷連接或本機模式中使用工具或產品,讓 Excel 2003 轉譯器顯示就沒有任何作用。
[Excel 2003] 功能表選項會維持無法使用的狀態。

如果您在 RSReportDesigner 組態檔中,讓 Excel 2003 轉譯器顯示,就一定可以在 SQL Server Data Tools (SSDT) 報表預覽中使用 [Excel 2003] 功能表選項。

使用新版本 Excel 2007-2010 轉譯延伸模組有許多優點。

改用新版本的 Excel 2007-2010(*.xlsx) 轉譯延伸模組:

(1) 可支援到 1,048,576 筆資料列。
(2) 可支援到 16,384 資料行。

(3) Excel 2007 讓試算表的容量擴充到超過 1 百萬資料列和 1 萬 6 千資料行。

Excel 轉譯延伸模組會將報表轉譯成 Microsoft Excel 2007-2010 的原生格式。
此格式為 Office Open XML。

此轉譯器所產生之檔案的內容類型為 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 而檔案的副檔名為 .xlsx。

與 Microsoft Excel 2003 相容的舊版 Excel 轉譯延伸模組已重新命名為 Excel 2003。
根據預設,只能使用 Excel 轉譯延伸模組。

您必須更新 Reporting Services 組態檔,才能使用 Excel 2003 轉譯延伸模組。

此轉譯器所產生之檔案的內容類型為 application/vnd.ms-excel 而檔案的副檔名為 .xls。
此轉譯器可提供 Microsoft Excel 2003 的回溯相容性。

--
SQL Server 2012 中 SQL Server Reporting Services 已被取代的功能

(1) Microsoft Word 和 Microsoft Excel 1997-2003 轉譯
(2) Microsoft Word 和 Microsoft Excel 1997-2003 二進位交換檔案格式的 Reporting Services BIFF8 轉譯延伸模組 Reporting Services 報表。

SQL Server 2012 包含以 Microsoft Office 2007-2010 Open XML 格式轉譯的延伸模組。




參考資料

匯出至 Microsoft Excel (報表產生器及 SSRS)
http://msdn.microsoft.com/zh-tw/library/dd255234.aspx

SQL Server 2012 中 SQL Server Reporting Services 已被取代的功能
http://msdn.microsoft.com/zh-tw/library/ms143509.aspx

無法匯入超過 65,536 列是文字檔到 Excel 97、 Excel 2000、 Excel 2002 和 Excel 2003
http://support.microsoft.com/kb/120596/zh-tw

SQL Server 2008:SSIS 2008 與 Excel 2007(*.xlsx、*.xlsb)
http://sharedderrick.blogspot.com/2009/11/sql-server-2008ssis-2008-excel.html

SSIS 2005 與 Excel 2007 (*.xlsx , *.xlsb)
http://sharedderrick.blogspot.com/2008/01/ssis-excel-2007-xlsx-xlsb.html

使用 SSIS 將 SSRS 所產生 Excel 檔案,做適當的歸檔與分類
http://sharedderrick.blogspot.tw/2009/11/ssis-ssrs-excel.html

SQL Server Reporting Services (SSRS): Reporting Services in SQL Server 2012 (codename "Denali") will support XLSX, DOCX formats. Bye bye 65536 rows limit in XLS files ;)
http://blogs.msdn.com/b/farukcelik/archive/2012/02/01/sql-server-reporting-services-ssrs-reporting-services-in-sql-server-2012-codename-quot-denali-quot-will-support-xlsx-docx-formats-bye-bye-65536-rows-limit-in-xls-files.aspx

沒有留言:

張貼留言