2013-04-24 86 views
1

excel文件有問題我一直在爲解決這一點,但到目前爲止,沒有運氣的在線搜索。到多張出口RDL報告從C#

在我開發當前的應用程序,我有需要導出潛在的大RDLC報告Excel文件(其他格式中)

這是我使用的是實現這一目標的代碼,它的工作原理非常好於正常大小的報告:

private static void ExportToExcel(LocalReport localReport, string filename) 
{ 
    if (File.Exists(filename)) 
    { 
    File.Delete(filename); 
    } 

    var bytes = localReport.Render("Excel", string.Empty); 
    using (var stream = File.Create(filename)) 
    { 
    stream.Write(bytes, 0, bytes.Length); 
    } 
} 

非常簡單的,但是當我嘗試導出大報告我得到類似如下的例外: 「Excel呈現擴展:行數在工作表中超過最大可能請求的行數:152190。最大行數:65536。「

因此,這裏是我的問題: 有沒有告訴出口商當達到行的最大數量,以創建一個新的工作表的方法嗎?如果是這樣的話?

回答

2

我遇到了類似的問題,並認爲我會在這裏添加我的經驗。由於沒有提到SSRS的版本,這個問題仍然沒有答案,我認爲這是良好的地方一樣。我編寫了一個PowerShell腳本來將SSRS 2012 rdl報告導出爲各種格式,其中一個是Excel。我也收到以下錯誤:

Exception calling "Render" with "7" argument(s): "Excel Rendering Extension: Number of rows exceeds the maximum possible in a worksheet of this version. Rows requested: 65587. Maximum rows: 65536. (rrRenderingError)"

SSRS 2012的確取消了從Excel出口65536行限制,但我有一個很難找到如何讓過去的這行限制編程。經過一番搜索之後,我碰到了一個Microsoft Support Article,這幫助我解決了這個問題。參數值「創先爭優」需要更改爲「EXCELOPENXML」

var bytes = localReport.Render("EXCELOPENXML", string.Empty); 

再次,這是早期版本的SSRS沒有幫助,但我想爲SSRS 2012

+0

改變參數爲「EXCELOPENXML 「工作。很好的發現。我不知道有可能以xlsx格式導出 – 2015-09-09 14:20:17

1

不知道你使用的是什麼版本的Excel,但65,536行是.xls文件的限制。如果您創建一個.xlsx文件,而不是,你就會有1,048,576行(​​從here),它應該滿足您的需求最大。

編輯:雖然我已經使用的本地Excel對象自己最近,顯然EPPlus將允許您創建XLSX文件容易得多。

HTH, ž

的要求:

xl.Application myExcelApp; 
xl.Workbooks myExcelWorkbooks; 
xl.Workbook myExcelWorkbook; 
xl.Worksheet myExcelWorksheet; 

myExcelApp = new xl.Application(); 
myExcelApp.DisplayAlerts = false; 
myExcelApp.Visible = false; 
myExcelWorkbooks = myExcelApp.Workbooks; 

String fileName = @"G:/foo/bar/goleafsgo.xlsx"; // set this to the file you want 
myExcelWorkbook = myExcelWorkbooks.Add(misValue); 
myExcelWorksheet = (xl.Worksheet)myExcelWorkbook.Worksheets.get_Item(1); 

Recordset rs = ConvertToRecordset(dt); 

ws.get_Range("A3", System.Reflection.Missing.Value).CopyFromRecordset(rs); 

myExcelWorkbook.SaveAs(fileName, xl.XlFileFormat.xlWorkbookDefault, misValue, misValue, false, false, xl.XlSaveAsAccessMode.xlNoChange, misValue, misValue, misValue, misValue, misValue); 
myExcelApp.Quit(); 

的ConvertToRecordset功能可以發現here

+0

提供更多的認識這個招呼,感謝您的回覆,雖然EPPlus看起來像是一個用於渲染.xslx文件的好庫,但我想使用一些將格式保存在.rdl文件中的內容,以避免重複設計。它還提高了可維護性,軟件必須允許用戶插入定製設計報告,以便對設計進行硬編碼不起作用。這就是爲什麼我正在尋找可以呈現LocalReport對象的東西。 雖然我很樂意使用本地excel對象來了解您的解決方案。 – 2013-04-24 13:29:54

+0

因爲我從來沒有使用過.rdl文件,所以我不能說在保持格式化的情況下複製到Excel中需要執行什麼操作......您必須通過每個「條目」並專門格式化每個單元格。我已經從DataTable(dt)向我的原始答案中添加了一個寫入電子表格的示例。 – 2013-04-24 14:29:26

+0

好的,我的壞。 我從你那裏得知你使用Excel對象以.xslx格式導出rdlc報表的初始答案。我也相信EPPlus會更適合你的代碼工作。 嗯,.rdl文件基本上是xmls,所以理論上它可以削減xml並根據數據源渲染excel,我只是不想重新發明輪子。 – 2013-04-24 14:58:42

1

我知道這是一個老問題,但您可以添加分頁符到您。 rdl文件。這些導致導出在Excel中啓動新工作表。您可以使用.rdl中的公式來確定何時需要動態分頁。