将SQL Server导出到Excel - 帖子太多了?

时间:2014-02-03 17:30:37

标签: c# sql .net sql-server excel

我正在使用此功能从我的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文件?

1 个答案:

答案 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

但是,在您的情况下,不是保存到物理文件,而是直接将流输出到响应。