我意识到这是一个很好的主题,但在看了很多帖子后我正在寻找一个不同的解决方案。该应用程序是ac#web,.net framework 4.5应用程序,需要将大约80,000多行从SQL Server 2012数据库导出到Excel电子表格模板(使其看起来漂亮并进行格式化)并将其流式传输给用户下载
我意识到一个答案可能是重新问我们为什么需要这样做并找到另一种方法。该应用程序正在查看众多的金融交易。用户希望保留在Excel中导出和播放数据的功能。在我开始研究帮助他们的其他方法之前,我想看看是否有人有任何好主意!
当前的解决方案遍历数据并使用OpenXML库生成XML。虽然这对于较小的数据集来说效果很好并且很快,但是对于较大的数据集来说这需要很长时间。
在没有:
的情况下,是否有创建Excel文件的替代方法我正在考虑使用SQL Server在内存中生成Excel文件(通过SSIS),从应用程序打开流,通过OpenXml或其他方式编辑格式,然后将文件流式传输到用户。不确定这是否可行或是否有其他选择?
答案 0 :(得分: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文件和其他样式。