如何使用 asp.net 以 excel 格式下载 SQL 数据

Posted

技术标签:

【中文标题】如何使用 asp.net 以 excel 格式下载 SQL 数据【英文标题】:How to download SQL data in excel format using asp.net 【发布时间】:2018-02-27 07:41:17 【问题描述】:

我正在尝试以 excel 格式下载我的数据。以下代码完美地完成了工作,但格式被破坏了。

我得到的错误 - 文件格式和扩展名不匹配。该文件可能已损坏或不安全。除非你相信它的来源,否则不要打开它。你还是要打开它吗? 确认是,文件打开。

请查看代码并帮助我了解必须进行哪些更改才能将数据下载到(xls 97-2003 excel 工作簿)中。

 if (dt4.Rows.Count > 0)
        
            string filename = "DownloadMobileNoExcel.xls";
            System.IO.StringWriter tw = new System.IO.StringWriter();
            System.Web.UI.htmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
            DataGrid dgGrid = new DataGrid();
            dgGrid.DataSource = dt4;
            dgGrid.DataBind();

            //Get the HTML for the control.
            dgGrid.RenderControl(hw);
            //Write the HTML back to the browser.
            //Response.ContentType = application/vnd.ms-excel;
            Response.ContentType = "application/vnd.ms-excel";
            Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
            this.EnableViewState = false;
            Response.Write(tw.ToString());

【问题讨论】:

尝试添加“Content-Type”、“application/Excel” 刚刚试过。它也没有帮助。 开始使用专门的库来创建 Excel 文件,例如 EPPlus。您现在所做的只是创建一个扩展名为 .xls 的 HTML 页面。 How to export DataTable to Excel的可能重复 dgGrid.RenderControl(hw); 是做什么的? 【参考方案1】:

首先

下载Open Xml 下载Close Xml库

导入此命名空间

using System.IO;
using System.Data;
using ClosedXML.Excel;
using System.Configuration;
using System.Data.SqlClient;

尝试这样做

 using (XLWorkbook wb = new XLWorkbook())
                        
                            wb.Worksheets.Add(dt, "Customers");

                            Response.Clear();
                            Response.Buffer = true;
                            Response.Charset = "";
                            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                            Response.AddHeader("content-disposition", "attachment;filename=SqlExport.xlsx");
                            using (MemoryStream MyMemoryStream = new MemoryStream())
                            
                                wb.SaveAs(MyMemoryStream);
                                MyMemoryStream.WriteTo(Response.OutputStream);
                                Response.Flush();
                                Response.End();
                            
                        

Mudassar Khan 有一篇关于这个的好文章 here

【讨论】:

以上是关于如何使用 asp.net 以 excel 格式下载 SQL 数据的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET C#中如何在excel中下载gridview,即如何在datatable中使用group by

导入excel doc,以正确的格式显示

Asp.net Core-在使用 javascript 或 C# 上传之前选择和验证 excel 文件?

asp.net中,如何实现将page页面各个空间的属性值,导出下载到一个word或excel中

如何在asp.net核心应用程序中执行open office calc(宏)

如何以 PDF 格式呈现 ASP.NET MVC 视图