2015-01-14 39 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