2015-01-14 105 views
2

我意識到這是一個很好的主題,但是在查看一些帖子後我正在尋找不同的解決方案。該應用程序是ac#web,.net framework 4.5應用程序,需要從SQL Server 2012數據庫導出大約80,000多行到Excel電子表格模板(使其看起來很漂亮並進行格式化)並將其流式傳輸給用戶以供下載。從SQL Server 2012導出大量行到Excel

我知道一個答案可能是重新問,爲什麼我們需要做到這一點,並找到一種替代方式。該應用程序正在審查衆多的金融交易。用戶希望保留在Excel中導出和播放數據的能力。在我開始尋找替代方法來幫助他們之前,我想看看有沒有人有任何明智的想法!

電流溶液循環通過數據和使用openxml庫生成XML。對於較小的數據集,這種方法運行良好,而對於較大的數據集則需要很長時間。

是否有任何替代創建Excel文件,無需:

  1. 提取數據庫中的所有數據將通過某種數據傳輸對象的是緩慢,因爲它的周圍傳輸大量數據的應用。
  2. 使用需要許可的第三方組件,因爲沒有預算。
  3. 使用OpenXml循環遍歷所有行並生成完整的輸出。
  4. 生成和存儲網絡驅動器上的物理文件,因爲存在數據安全限制。
  5. 使用SSRS

我想一起使用SQL Server在內存中生成(通過SSIS)Excel文件的東西線,從應用程序中打開一個流,通過OPENXML或別的東西編輯格式然後將文件流式傳輸給用戶。不確定這是可能的還是有其他選擇?

回答

2

您可以嘗試這種方法,但當然涉及從數據庫中提取數據到應用程序。

Response.Clear(); 
Response.Buffer = true; 
Response.AddHeader("content-disposition", "attachment;filename=YourFileName.xls"); 
Response.Charset = ""; 
Response.ContentType = "application/vnd.ms-excel"; 
using (StringWriter sw = new StringWriter()) 
{ 
    HtmlTextWriter hw = new HtmlTextWriter(sw); 

    FileInfo fi = new FileInfo(Server.MapPath("~/App_Themes/YourCSS.css")); 
    StringBuilder sb = new StringBuilder(); 
    StreamReader sr = fi.OpenText(); 
    while (sr.Peek() >= 0) 
     sb.Append(sr.ReadLine()); 
    sr.Close(); 

    sb.Append(" table.tnew tr { height: 20px; } "); 
    sb.Append(" table.tnew tr td, th { border:1px solid #CCCCCC; } "); 
    sb.Append(" table.tnew tr.RowTotale td { background-color:#F5F5F5; color: #333333; text-transform:uppercase; font-weight: bold; font-size:11px; } "); 

    GridView gv = new GridView(); 
    gv.DataSource = YourDataSource; 
    gv.DataBind(); 
    gv.RenderControl(hw); 

    Response.Output.Write(string.Format("<html><head><style type='text/css'>{0}</style></head><body>{1}</body></html>", sb.ToString(), sw.ToString()); 
    Response.Flush(); 
    Response.End(); 
} 

正如你所看到的,你甚至可以添加你的CSS文件和其他樣式。

+0

我還沒有看到造型響應輸出的該方法之前,所以1,但如所提到的,數據拉動到應用程序來呈現將慢下來不幸所以-1。 – sarin

+0

@sarin數據量(以字節爲單位)是多少? – dario

+0

那麼使用OpenXML生成的帶有80000行的excel文件目前大約爲10MB。 – sarin