我正在使用此功能从我的SQL Server查询
创建Excel文件DataTable dt = new DataTable();
SqlConnection objcon = new SqlConnection(connectionString);
string sql = "My SELECT SQL";
SqlDataAdapter objda = new SqlDataAdapter(sql, objcon);
objda.Fill(dt);
GridView gvreport = new GridView();
gvreport.DataSource = dt;
gvreport.DataBind();
string fileName = string.Format("fileNameHere");
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=" + fileName);
Response.ContentType = "application/excel";
System.IO.StringWriter sw = new System.IO.StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gvreport.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
return null;
直到我现在意识到当它试图写入超过11,000行时,它的效果并不好。
Excel文件本身很好但是在大约11,000行之后它突然在一行中断开,之后所有行都是空白的。行本身仍然是“创建”的边框和所有内容,但它们都是空白的。
知道造成这种情况的原因是什么?或者有没有更好的方法来创建这样的Excel文件?
答案 0 :(得分:1)
嗯,在你的情况下,你实际上并没有生成一个真正的Excel文件,只是简单的HTML并告诉Excel打开它并进行转换。使用OpenOffice或LibreOffice或任何其他实际需要真实Excel文件的工具时,您可能会遇到其他问题。
我会通过直接使用OpenXml或通过ClosedXml或其他类似组件间接使用{@ 3}来研究更强大的解决方案。
例如,如果您使用ClosedXml,则可以执行以下操作:
var wb = new XLWorkbook();
var dataTable = GetTable("Information");
// Add a DataTable as a worksheet
wb.Worksheets.Add(dataTable);
wb.SaveAs("AddingDataTableAsWorksheet.xlsx");
摘自:https://closedxml.codeplex.com/wikipage?title=Adding%20DataTable%20as%20Worksheet
但是,在您的情况下,不是保存到物理文件,而是直接将流输出到响应。