将网格导出为ex​​cel后无法打开文件

时间:2014-07-10 06:44:46

标签: asp.net excel

我想将网格导出为ex​​cel。如果网格有100行或更少的行,一切正常。但我的网格有超过2000行。我没有收到任何错误或异常,但导出后文件没有打开,Excel停止工作。当我打开文件时,我收到一条警告消息,如"' filename.xls'的文件格式和扩展名。不匹配。该文件可能已损坏或不安全。除非你相信它的来源,否则不要打开它。你想打开吗?"。

我正在使用以下代码

        Response.ClearContent();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", string.Format("attachment; filename=   {0}", "IAParts.xls"));
        Response.ContentType = "application/ms-excel";
        System.IO.StringWriter sw = new System.IO.StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        GridView1.AllowPaging = false;
        BindGrid();//this method binds the data to grid
        GridView1.RenderControl(htw);
        Response.Write(sw.ToString());
        sw.Flush();
        Response.End();

1 个答案:

答案 0 :(得分:0)

亲爱的朋友,关于扩展文件的错误,我可以说这是关于可以通过查看此链接解决的扩展加固

http://blogs.msdn.com/b/vsofficedeveloper/archive/2008/03/11/excel-2007-extension-warning.aspx

或在txt文件中使用此行并另存为.reg但这些行可以根据您的版本和需求进行更改[我为这些行编写了这些行]

[开始]

Windows注册表编辑器版本5.00

[HKEY_CURRENT_USER \软件\微软\办公室\ 15.0 \ EXCEL \安全] “ExtensionHardening”= DWORD:00000000

[结束]

之后你永远不会看到有关扩展或...的错误 并且对于使用excel文件,我为你提供了我在我的项目中搜索和使用的这个功能;)

public void ExportToExcel(DataTable dt)
    {
        if (dt.Rows.Count > 0)
        {
            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 = dt;
            dgGrid.DataBind();
            dgGrid.RenderControl(hw);
            Response.ContentType = "application/vnd.ms-excel"; // 2003 office excel
            Response.AppendHeader("Content-Disposition", "filename=OutPut.xls");
            string style = @"<style> TABLE { border: 1px solid black; border-collapse: collapse; } TD {mso-number-format:\@; }</style> ";
            Response.Write(style);
            Response.Write(tw.ToString());
            Response.End();
        }
    }