我正在使用下面的函数将DataGrid中的信息导出到Excel。但当它询问我是否要保存或导出时,需要太长时间。有谁知道为什么/任何人有类似的经历?
void ExportToExcel3()
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
GridView2.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
答案 0 :(得分:4)
在查看解决方案的性能时,重要的是要意识到您实际上并未将DataGrid导出到Excel:您实际上将其内容编写为HTML,然后“欺骗”Windows以使用HTML打开该HTML Excel中。然后,Excel将HTML表格转换为工作表,并且可以。
这里的瓶颈很可能是Excel的转换过程:特别是在大型表上,解析HTML需要做很多工作,需要对数据类型和转换进行大量缓慢的猜测。可能,HTML甚至如此笨拙,以至于从服务器下载到客户端也会引起明显的延迟。
由于您不控制与这些瓶颈相关的代码,除了通过切换到更高效的格式(即原生Excel而不是HTML)完全避免它们之外,您无法做到消除它们。 / p>
有几个.NET库可以帮助您解决这个问题,包括commercial和free。谷歌搜索也很可能会发现很多其他选择。请注意,您的服务器端代码将变得更加复杂:您必须设置电子表格结构/格式,并遍历DataGrid以导出每一行。但最终结果XLS文件将更加紧凑和高效,并且对于您的用户而言比当前的HTML导出更有用(即可编辑)。