在某些客户的电脑上导出EXCEL文件,导出来的不是EXCEL文件,却是.aspx格式的文件,请问谁知道为什么???有什么解决方法,在网上也没找到同类问题求解决方案!!!!!!以下是导出EXCEL代码
/// <summary>
    /// 动态创建Grid
    /// </summary>
    /// <returns></returns>
    private GridView CreateGrid()
    {
        GridView gdvGrid = new GridView();
        gdvGrid.AutoGenerateColumns = false;
        BoundField bf1 = new BoundField();
        bf1 .HeaderText = "采购员名称";
        bf1 .DataField = "采购员名称";
        gdvGrid.Columns.Add(bf1 );
        return gdvGrid;
    }
    /// <summary>
    /// 导出Excel方法
    /// </summary>
    /// <param name="ctl"></param>
    private void ToExcel(System.Web.UI.Control ctl)
    {
        Response.Charset = "UTF-8";
        Response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls");
        Response.ContentEncoding = System.Text.Encoding.UTF8;
        Response.ContentType = "application/ms-excel";        ctl.Page.EnableViewState = false;
        System.IO.StringWriter tw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw);        ctl.RenderControl(hw);        Response.Write(tw.ToString());
        Response.End();
    }    /// <summary>
    /// 绑定动态表格及调用ToExcel方法
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnToExcel_Click(object sender, EventArgs e)
    {
        GridView gdvGrid = CreateGrid();
        divshow.Controls.Add(gdvGrid);
        DataSet ds = new DataSet();
        ds = GetListFromProc(); 
        gdvGrid.DataSource = ds.Tables["NoticeInvoiceDetail_DS1"];
        gdvGrid.DataBind();        Control table = gdvGrid.Controls[gdvGrid.Controls.Count - 1];
        ToExcel(table);        divshow.Controls.Clear();
    }

解决方案 »

  1.   

    http://apps.hi.baidu.com/share/detail/14881779
      

  2.   


    /// <summary>
      /// 导出Excel方法
      /// </summary>
      /// <param name="ctl"></param>
      private void ToExcel(System.Web.UI.Control ctl)
      {
      Response.Charset = "UTF-8";
      Response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls");
      Response.ContentEncoding = System.Text.Encoding.UTF8;
      Response.ContentType = "application/ms-excel";  ctl.Page.EnableViewState = false;
      System.IO.StringWriter tw = new System.IO.StringWriter();
      System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw);  ctl.RenderControl(hw);  Response.Write(tw.ToString());
      Response.End();
      }
    改成[code=C#]
    public static void gSendGridInfoToExcel(Gridview GridX)
      {
       Excel.Application excel= new Excel.ApplicationClass();
       Excel._Workbook xBk = excel.Workbooks.Add(true);
       Excel._Worksheet xSt = (Excel._Worksheet)xBk.ActiveSheet;
       Excel.Range excelCell=null;
       try
       {
        
        
        //赋值对象
        object[] objarr;
        DataTable dtTest=new DataTable();;
        int i,j;
        int iRows,iCows;
        int iVisable;
        iVisable=0;
        iCows=0;
        ArrayList list=new ArrayList();
        //如果绑定数据源是DataTable和DataSet,取得行数
        if (GridX.DataSource is System.Data.DataSet || GridX.DataSource is System.Data.DataTable)
        {
         dtTest=(DataTable)GridX.DataSource;
         iRows=dtTest.Rows.Count;
        }
        else if (GridX.DataSource is System.Data.DataView)
        {
         DataView dvTest=(DataView)GridX.DataSource;
         iRows=dvTest.Count;
         dtTest=dvTest.Table;
        }
         //如果是集合取得行数
        else
        {
         System.Collections.CollectionBase ColTest;
         ColTest=(System.Collections.CollectionBase)GridX.DataSource;
         iRows=ColTest.Count;
        }
        //如果有TableStyles则根据TableStyles取得(标题行)
        if (GridX.TableStyles.Count>0)
        {
         iCows=GridX.TableStyles[0].GridColumnStyles.Count;
         for(i=0;i<iCows;i++)
         {
          if(GridX.TableStyles[0].GridColumnStyles[i].Width>0)
          {
           iVisable++;
           list.Add(GridX.TableStyles[0].GridColumnStyles[i].HeaderText);
          }
          
         }
         objarr = new object[iVisable];
         objarr=list.ToArray();
         excelCell = xSt.get_Range(excel.Cells[1,1],excel.Cells[1,iVisable]);
         excelCell.Value2 = objarr;
         //数据行
         for(i=0;i<iRows;i++)
         {
          objarr = new object[iVisable];
          list.Clear();
         
          for(j=0;j<iCows;j++)
          {
           if(GridX.TableStyles[0].GridColumnStyles[j].Width>0)
           {
            list.Add("'"+GridX[i,j].ToString().Replace("\n",""));
           }
          
          }
          if (list.Equals(System.DBNull.Value))
          {
           break;
          }
          objarr=list.ToArray();
          excelCell = xSt.get_Range(excel.Cells[i+2,1],excel.Cells[i+2,iVisable]);
          excelCell.Value2 = objarr;   
         }
        } 
        else
        {
         iCows=dtTest.Columns.Count;
         for(i=0;i<iCows;i++)
         {
          list.Add(dtTest.Columns[i].Caption);
         }
         objarr = new object[iCows];
         objarr=list.ToArray();
         excelCell = xSt.get_Range(excel.Cells[1,1],excel.Cells[1,iCows]);
         excelCell.Value2 = objarr;     //数据行
         for(i=0;i<iRows;i++)
         {
          objarr = new object[iCows];
          list.Clear();
         
          for(j=0;j<iCows;j++)
          {
           list.Add("'"+GridX[i,j].ToString().Replace("\n",""));
          }
          if (list.Equals(System.DBNull.Value))
          {
           break;
          }
          objarr=list.ToArray();
          excelCell = xSt.get_Range(excel.Cells[i+2,1],excel.Cells[i+2,iCows]);
          excelCell.Value2 = objarr;   
         }    }
        dtTest.Dispose();
       
        excel.Visible=true;
        
       }
       catch (System.Exception e)
       {
        throw e;
       }
       finally
       {
        excelCell=null;
        xBk=null;
        xSt=null;
        excel=null;  
        GC.Collect();
       }
       
      }[code]或者找一个方法替换一下
    传入Gridview 就行了。