Asp.net 无法在IE 11中导出为Excel

Asp.net 无法在IE 11中导出为Excel,asp.net,internet-explorer,export-to-excel,internet-explorer-11,Asp.net,Internet Explorer,Export To Excel,Internet Explorer 11,我有一个web应用程序,可以将数据从gridview导出到Excel。它在Chrome中运行良好,但在IE11和Firefox中不起作用。我在谷歌上看到了很多问题,但这个错误似乎是独一无二的 受保护的void ExportToExcel(列出项目) { Response.Clear(); Response.Buffer=true; Response.ContentType=“application/vnd.ms excel”; Response.ContentEncoding=System.Te

我有一个web应用程序,可以将数据从gridview导出到Excel。它在Chrome中运行良好,但在IE11和Firefox中不起作用。我在谷歌上看到了很多问题,但这个错误似乎是独一无二的

受保护的void ExportToExcel(列出项目)
{
Response.Clear();
Response.Buffer=true;
Response.ContentType=“application/vnd.ms excel”;
Response.ContentEncoding=System.Text.Encoding.Unicode;
Response.AddHeader(“内容处置”,“附件;文件名=MyFile”+DateTime.Now.ToString()+“.xls”);
响应。Charset=“”;
BinaryWrite(System.Text.Encoding.Unicode.getPremission());
this.EnableViewState=false;
System.IO.StringWriter sw=新的System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htw=新的System.Web.UI.HtmlTextWriter(sw);
GridView gv=新的GridView();
gv.AutoGenerateColumns=false;
gv.RowDataBound+=新的GridViewRowEventHandler(dataExportExcel_ItemDataBound);
gv.DataSource=项目;
gv.DataBind();
gv.渲染控制(htw);
Response.Write(AddExcelStyling());//包含开始的html元素
StringBuilder sbResponseString=新建StringBuilder();
sbResponseString.Append(sw+“”);
Response.Write(sbResponseString.ToString());
Response.Flush();
Response.Close();
Response.End();
}
…我遇到的问题与无法访问Internet临时文件有关。我得到一个弹出窗口“加载期间的问题”和十几个条目:“缺少文件…临时Internet文件\内容\”,然后我得到一条消息,上面写着“无法读取文件”。 我有一个图像来表示错误,但我无法上传图像。 当我点击其中一个链接时,它会加载我的网页而没有任何样式,我也不会得到excel文件。
有人知道会出现什么问题吗?

这是我使用的导出到Excel函数(用于数据表)的简化版本,适用于所有浏览器。看看这是否有帮助。但代码与您的代码非常相似:

public void ExportDataToExcel(String FileName, DataTable dtData)
{
    // get gridview out of datatable
    GridView gv = new GridView();
    gv.AllowPaging = false;
    gv.DataSource = dtData;
    gv.DataBind();

    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.Buffer = true;
    HttpContext.Current.Response.AddHeader("content-disposition",
        "attachment;filename=" + FileName + ".xls");
    HttpContext.Current.Response.Charset = "";
    HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);

    for (int i = 0; i < gv.Rows.Count; i++)
    {
        // Apply text style to each Row
        gv.Rows[i].Attributes.Add("class", "textmode");
    }
    gv.RenderControl(hw);

    HttpContext.Current.Response.Output.Write(sw.ToString());

    // commenting this out to resolve this error
    // System.Web.HttpException: The remote host closed the connection.     
    // The error code is 0x800703E3.
    // HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.End();
}
public void ExportDataToExcel(字符串文件名,DataTable dtData)
{
//从datatable中获取gridview
GridView gv=新的GridView();
gv.AllowPaging=false;
gv.DataSource=dtData;
gv.DataBind();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer=true;
HttpContext.Current.Response.AddHeader(“内容处置”,
“附件;文件名=“+filename+”.xls”);
HttpContext.Current.Response.Charset=“”;
HttpContext.Current.Response.ContentType=“应用程序/vnd.ms excel”;
StringWriter sw=新的StringWriter();
HtmlTextWriter hw=新的HtmlTextWriter(sw);
对于(int i=0;i
我明白了!我在现有代码中添加了两行代码,它可以正常工作。请参见标有**的行:

HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.Buffer = true;
        //HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
        HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Unicode;
        HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=Panorama_Project-" + DateTime.Now.ToString() + ".xls");

        HttpContext.Current.Response.Charset = "";
        HttpContext.Current.Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());
        this.EnableViewState = false;

        System.IO.StringWriter sw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);

        GridView gv = new GridView();
        gv.AutoGenerateColumns = false;

        gv.RowDataBound += new GridViewRowEventHandler(dataExportExcel_ItemDataBound);

        gv.DataSource = Projects;
        gv.DataBind();

        gv.RenderControl(htw);
        HttpContext.Current.Response.Write(AddExcelStyling());
        StringBuilder sbResponseString = new StringBuilder();
        sbResponseString.Append(sw + "</body></html>");
        **HttpContext.Current.Response.AddHeader("Content-Length", sbResponseString.Length.ToString());**
        HttpContext.Current.Response.Write(sbResponseString.ToString());
        //HttpContext.Current.Response.Flush();
        //HttpContext.Current.Response.Close();
        //HttpContext.Current.Response.End();
        **System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();**
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer=true;
//HttpContext.Current.Response.ContentType=“应用程序/vnd.ms excel”;
HttpContext.Current.Response.ContentType=“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”;
HttpContext.Current.Response.ContentEncoding=System.Text.Encoding.Unicode;
HttpContext.Current.Response.AddHeader(“内容处置”,“附件;文件名=全景_项目-”+DateTime.Now.ToString()+”.xls”);
HttpContext.Current.Response.Charset=“”;
HttpContext.Current.Response.BinaryWrite(System.Text.Encoding.Unicode.GetPremission());
this.EnableViewState=false;
System.IO.StringWriter sw=新的System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htw=新的System.Web.UI.HtmlTextWriter(sw);
GridView gv=新的GridView();
gv.AutoGenerateColumns=false;
gv.RowDataBound+=新的GridViewRowEventHandler(dataExportExcel_ItemDataBound);
gv.DataSource=项目;
gv.DataBind();
gv.渲染控制(htw);
HttpContext.Current.Response.Write(AddExcelStyling());
StringBuilder sbResponseString=新建StringBuilder();
sbResponseString.Append(sw+“”);
**HttpContext.Current.Response.AddHeader(“内容长度”,sbResponseString.Length.ToString())**
HttpContext.Current.Response.Write(sbResponseString.ToString());
//HttpContext.Current.Response.Flush();
//HttpContext.Current.Response.Close();
//HttpContext.Current.Response.End();
**System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest()**

它似乎试图显示整个响应对象,其中包括我的页面和所有链接的资源。内容长度和替换Response.End和Response.Flush with System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest()似乎可以解决问题。

尝试替换Response。使用HttpContext.Current.Resoponse?还可以尝试注释Response.Flush(),看看这是否也有效。您不是生成实际的Excel文件,而是生成伪装为Excel文件的HTML文件。这涉及到很多问题。我描述了如何生成真正的Excel文件。尝试了HttpContext,当前的,但不起作用…还尝试注释响应。刷新,出于某种原因,每次尝试导出到Excel时都会提示我登录。我来看看梅森的方法。@RobVenable你的代码中有没有具体的错误信息?它有时会起作用,但我经常会收到一个“无法打开文件”和一个弹出窗口