2013-10-22 143 views
0

我有一個gridview的頁面。我需要以excel格式下載該gridview數據。我已經使用下面的代碼下載到Excel格式。導出到Excel中的Excel#

public static void Export(string fileName, GridView gv) 
{ 
    string style = @"<style> .text { mso-number-format:\@;text-align:right; } </style> "; 
    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName)); 
    HttpContext.Current.Response.ContentType = "application/ms-excel"; 

    using (StringWriter sw = new StringWriter()) 
    { 
     using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
     { 
      HttpContext.Current.Response.Write(style); 

      // Create a table to contain the grid  
      System.Web.UI.WebControls.Table table = new System.Web.UI.WebControls.Table(); 

      // include the gridline settings 
      table.GridLines = gv.GridLines; 

      // add the header row to the table 
      if (gv.HeaderRow != null) 
      { 
       PrepareControlForExport(gv.HeaderRow); 
       table.Rows.Add(gv.HeaderRow); 
      } 

      // add each of the data rows to the table 
      foreach (GridViewRow row in gv.Rows) 
      { 
       // add numeric style for each cell 
       foreach (TableCell cell in row.Cells) 
       { 
        cell.Attributes.Add("class", "text"); 
       } 
       PrepareControlForExport(row); 
       table.Rows.Add(row); 
      } 

      // add the footer row to the table 
      if (gv.FooterRow != null) 
      { 
       PrepareControlForExport(gv.FooterRow); 
       table.Rows.Add(gv.FooterRow); 
      } 

      // render the table into the htmlwriter 
      table.RenderControl(htw); 

      // render the htmlwriter into the response 
      HttpContext.Current.Response.Write(sw.ToString()); 
      HttpContext.Current.ApplicationInstance.CompleteRequest(); 
     } 
    } 
} 

/// <summary> 
/// Replace any of the contained controls with literals   
/// </summary>  
/// <param name="control"></param> 
private static void PrepareControlForExport(Control control) 
{ 
    for (int i = 0; i < control.Controls.Count; i++) 
    { 
     Control current = control.Controls[i]; 

     if (current is LinkButton) 
     { 
      control.Controls.Remove(current); 
      control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text)); 
     } 
     else if (current is ImageButton) 
     { 
      control.Controls.Remove(current); 
      control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText)); 
     } 
     else if (current is HyperLink) 
     { 
      control.Controls.Remove(current); 
      control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text)); 
     } 
     else if (current is DropDownList) 
     { 
      control.Controls.Remove(current); 
      control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text)); 
     } 
     else if (current is CheckBox) 
     { 
      control.Controls.Remove(current); 
      control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False")); 
     } 
     if (current.HasControls()) 
     { 
      PrepareControlForExport(current); 
     } 
    } 
} 

一旦下載文件就下載母版頁的css文件。 您能否讓我知道,如何解決這個問題。

+0

我不明白你的問題是什麼,你可以嘗試解釋更詳細? – Nunners

+1

將數據導出爲[真正的Excel文件](http://stackoverflow.com/questions/151005/create-excel-xls-and-xlsx-file-from-c-sharp)而不是希望導出會更容易Excel會打開你的HTML? – Rup

回答

1

從C#創建真正的Excel文件的最簡單方法是使用ClosedXML庫:ClosedXML。 ClosedXML也可以作爲NuGet包使用,以方便上手。

0

試試我的工作方法:

void ExportToExcel(GridView grdData, string filename) 
{ 
    grdData.BorderStyle = BorderStyle.Solid; 
    grdData.BorderWidth = 1; 
    grdData.BackColor = Color.WhiteSmoke; 
    grdData.GridLines = GridLines.Both; 
    grdData.Font.Name = "Verdana"; 
    grdData.Font.Size = FontUnit.XXSmall; 
    grdData.HeaderStyle.BackColor = Color.DimGray; 
    grdData.HeaderStyle.ForeColor = Color.White; 
    grdData.RowStyle.HorizontalAlign = HorizontalAlign.Left; 
    grdData.RowStyle.VerticalAlign = VerticalAlign.Top; 

    HttpResponse response = HttpContext.Current.Response; 
    response.Clear(); 
    response.Charset = ""; 
    response.ContentType = "application/vnd.ms-excel"; 
    response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename+ "\""); 

    using (var sw = new StringWriter()) 
    { 
     using (var htw = new HtmlTextWriter(sw)) 
     { 
      grdData.RenderControl(htw); 
      response.Write(sw.ToString()); 
      response.End(); 
     } 
    } 
} 
0
 Response.ClearContent(); 

     Response.Buffer = true; 

     Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "excelname.xls")); 

     Response.ContentType = "application/ms-excel"; 

     //which row you dont want in gridview 
     GridView5.Columns[0].Visible = false; 

     StringWriter sw = new StringWriter(); 

     HtmlTextWriter htw = new HtmlTextWriter(sw); 

     GridView5.AllowPaging = false; 

     GridView5.RenderControl(htw); 

     Response.Write(sw.ToString()); 

     Response.End(); 
+0

請提供解釋給你的答案(爲什麼這個工作,有什麼不同的其他解決方案) –