【问题标题】:Exporting SQL Server to Excel - Too many posts?将 SQL Server 导出到 Excel - 帖子太多?
【发布时间】:2014-02-03 17:30:37
【问题描述】:

我正在使用这个函数从我的 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 文件?

【问题讨论】:

  • 您使用的是什么版本的 Excel?
  • @davisoa 创建还是阅读?我正在使用 openoffice 阅读,而我不确定代码用于创建什么。
  • 谷歌搜索“Apache POI”会导致不同的方式。您可以决定是否更好。
  • 我首先要看的是某处是否超时,或者是否达到了请求/响应大小的某种大小限制。
  • @davisoa 实际上。我刚刚尝试使用 MS Office 2010 打开它可以很好地阅读所有帖子,问题在于 openoffice。好吧,这以一种奇怪的方式得到了解决。

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


【解决方案1】:

好吧,在您的情况下,您实际上并没有生成真正的 Excel 文件,只是纯 HTML 并告诉 Excel 打开并转换它。将这种方法与 OpenOffice 或 LibreOffice 或任何其他实际需要真实 Excel 文件的工具一起使用时,您可能会遇到其他问题。

我会寻找更强大的解决方案,直接使用OpenXml,或通过ClosedXml 或其他类似组件间接使用。

例如,如果你要使用 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

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

【讨论】:

  • 有没有和我的类似的?也就是说,我可以使用我已经预定义的 SQL,还是我必须创建类?
  • 刚刚添加了一个示例,取自 ClosedXml 文档
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
相关资源
最近更新 更多