我在我的asp.net應用程序中有一個標準頁面。當用戶點擊報告按鈕時,首先在一個新頁面中將結果綁定到一個數據網格,然後通過改變內容類型方法將該網頁導出到excel文件。如何將大數據導出到Excel
這通常有效,但是當大量數據到來時,會拋出system.outofmemoryexception。
有沒有人知道一種方法來解決這個問題,或另一個有用的技術呢?
我在我的asp.net應用程序中有一個標準頁面。當用戶點擊報告按鈕時,首先在一個新頁面中將結果綁定到一個數據網格,然後通過改變內容類型方法將該網頁導出到excel文件。如何將大數據導出到Excel
這通常有效,但是當大量數據到來時,會拋出system.outofmemoryexception。
有沒有人知道一種方法來解決這個問題,或另一個有用的技術呢?
這可能是因爲您的應用程序試圖在內存中構建整個Excel電子表格並在完成後將其交付給用戶。對於大型數據集,您可以輕鬆使用所有可用內存,這很可能也會導致應用程序顯着減慢其他用戶的速度。
相反,您可以嘗試將數據傳輸給用戶。無論數據集有多大,這將使用相同數量的內存。您可以獲取Excel電子表格的字節,或者簡單地將數據轉換爲CSV,然後設置HTTP響應類型並將其傳輸給用戶。
下面是一個例子:
byte[] reportDoc = GetExportExcel();
context.Response.ContentType = "application/vnd.ms-excel";
//set the content disposition header to force download
context.Response.AddHeader("Content-Disposition", "attachment;filename=" +
"Export.xls");
//write the file content byte array
context.Response.BinaryWrite(reportDoc);
有一個在http://bytes.com/topic/asp-net/answers/326796-example-streaming-excel-browser-download一個詳細的教程
Excel中也有記錄的最大數目,我相信是大約65K,雖然可能不是直接你的問題的結果,但如果你在與他們一起工作時遇到錯誤,可能仍會出現。
限制是每張表,並且只是舊的XLS文件類型的問題。 – Moulde 2013-01-04 11:15:21