Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GridView导出到Excel_C#_Asp.net_Gridview_Export To Excel - Fatal编程技术网

C# GridView导出到Excel

C# GridView导出到Excel,c#,asp.net,gridview,export-to-excel,C#,Asp.net,Gridview,Export To Excel,我有一个asp.net页面,其中有一个gridview和一个按钮。 在button click事件中,我编写了将gridview导出到excel的代码,该代码运行得非常好。 但当我试图打开导出的excel文件时,会显示一个对话框,上面写着: “您试图打开的文件的格式与 由文件扩展名指定。请验证文件是否已损坏 并且在打开文件之前来自受信任的源” 不仅如此,我在gmail中以附件的形式发送了那个excel文件,并试图在mobile中打开它,当时它以html文件的形式打开。我能做些什么,因为我的客户将

我有一个asp.net页面,其中有一个gridview和一个按钮。 在button click事件中,我编写了将gridview导出到excel的代码,该代码运行得非常好。 但当我试图打开导出的excel文件时,会显示一个对话框,上面写着:

“您试图打开的文件的格式与 由文件扩展名指定。请验证文件是否已损坏 并且在打开文件之前来自受信任的源”


不仅如此,我在gmail中以附件的形式发送了那个excel文件,并试图在mobile中打开它,当时它以html文件的形式打开。我能做些什么,因为我的客户将使用mobile查看邮件。

当我导出到excel时,我只是创建了一个逗号分隔的文件,并给它一个excel文件扩展名。当我开始用带双引号的逗号分隔时,这个消息就消失了


“一”、“二”、“三”而不是按钮单击事件中的一、二、三:

        protected void btnExcel_Click(object sender, ImageClickEventArgs e)
    {
        //export to excel
        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
        Response.Charset = "";

        // If you want the option to open the Excel file without saving then
        // comment out the line below
        // Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = "application/vnd.xls";
        System.IO.StringWriter stringWrite = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
       //GV is the ID of gridview
        GV.RenderControl(htmlWrite);
        Response.Write(stringWrite.ToString());
        Response.End();
    }
并在页面代码隐藏中重写此方法:

    public override void VerifyRenderingInServerForm(Control control)
{
    /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
       server control at run time. */
}

我建议创建一个实际的Excel文件,而不是使用Excel文件扩展名创建CSV或HTML

实现这一点的一个简单方法是使用

为此,请从codeplex站点下载ClosedXML.dll和DocumentFormat.OpenXml.dll,并将它们作为参考添加到ASP.NET项目中。然后,在按钮单击事件中,您只需设置Excel工作簿,从绑定到
GridView
的同一
DataTable
创建工作表,并将工作簿文件保存在HTTP响应中。大概是这样的:

var wb = new ClosedXML.Excel.XLWorkbook();
DataTable dt = GetTheDataTable();
dt.TableName = "This will be the worksheet name";

wb.Worksheets.Add(dt);

Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=\"FileName.xlsx\"");

using (var ms = new System.IO.MemoryStream()) {
    wb.SaveAs(ms);
    ms.WriteTo(Response.OutputStream);
    ms.Close();
}

Response.End();

我会选择ClosedXML而不是其他替代方案,因为许可证限制较少,文档非常好,开发人员非常友好,而且项目目前非常活跃。

您在尝试什么。。?如果您已经将html表导出到一个扩展名为xls或xlsx的文件中(我假设是通过),请将您已经尝试过的代码放入副本中。Excel可以解释html表,但它不是真正的Excel文件。使用EPPLus创建一个真正的excel文件。@TimSchmelter你能告诉我什么是EPPPlus吗..mathewtinus,稍微搜索一下就会得到这个linnk作为EPPLus的第一个结果。我赞同Tim关于使用这个包的建议,因为它创建了一个原生excel文档,而不是下面使用的html表黑客。在更高版本的excel中,html表格路由将导致错误和格式问题。