2012-05-02 94 views
5

我想保存導出網格視圖數據的excel文件。我已經編寫代碼導出gridview數據爲Excel,但我不知道如何保存導出的文件。導出網格視圖excel並將excel文件保存到文件夾

以下是我的代碼的GridView導出到Excel:

Response.Clear(); 
Response.Buffer = true; 
Response.ContentType = "application/vnd.ms-excel"; 
Response.AddHeader("content-disposition", "attachment;filename=MyFiles.xls"); 
Response.Charset = ""; 
this.EnableViewState = false; 
System.IO.StringWriter sw = new System.IO.StringWriter(); 
System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); 
gvFiles.RenderControl(htw); 
Response.Write(sw.ToString()); 
Response.End(); 
+5

你知道你沒有出口Excel文件,但一個HTML表? Excel可以解釋它,無論如何它不是一個真正的Excel文件。看看[EPPLus](http://epplus.codeplex.com/releases/view/42439)。 –

+0

像Tim說的那樣使用EPPlus - 這是一個爲您生成實際.xlsx文件的庫,然後您可以下載這些文件。我用它來預算監控應用程序,它很棒。 – markp3rry

+0

什麼是您的網格視圖的數據源? –

回答

10

你可以這樣做:

private void ExportGridView() 
{ 
    System.IO.StringWriter sw = new System.IO.StringWriter(); 
    System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); 

    // Render grid view control. 
    gvFiles.RenderControl(htw); 

    // Write the rendered content to a file. 
    string renderedGridView = sw.ToString(); 
    System.IO.File.WriteAllText(@"C:\Path\On\Server\ExportedFile.xlsx", renderedGridView); 
} 
+1

給我錯誤 類型'GridView'的控件'gvFiles'必須放置在runat = server的窗體標記中。 :( – Neo

+1

了俺們 公衆覆蓋無效VerifyRenderingInServerForm(控制控制) {} 這 – Neo

0

你問如何保存導出的文件...您的代碼放gridview的(HTML)的內容呈現到響應。在這種情況下,您的瀏覽器(客戶端)將收到此響應並彈出一個對話框詢問保存位置。所以你的瀏覽器會爲你保存文件。

如果你想保存它的服務器端,你不能把渲染的gridview放入響應。將其寫入本地硬盤上的文件(如上面的答案所示)。

請記住,在您自己的開發計算機(即生產環境)以外的環境中,ASP.NET工作進程可能沒有足夠的訪問權限來寫入硬盤上的指定位置。這裏有幾個答案是不會忽略這個問題:

ASP.net user account permissions
ASP.NET + Access to the path is denied
System.UnauthorizedAccessException: Access to the path is denied

1

這可能會幫助你//

protected void exporttoexcel_Click(object sender, EventArgs e) 
{ 
    Response.Clear(); 

    Response.AddHeader("content-disposition", "attachment;filename=" attachment" + ".xls"); 

    Response.Charset = ""; 

    // If you want the option to open the Excel file without saving than 

    // 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); 

    GridView1.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. 

} 
+0

幫我完全導出到Excel代碼打交道。 我只是不太確定保持'VerifyRenderingInServerForm(控制控制) 「儘管空了。 – AceMark

1
public partial class exportgridtoexcel : System.Web.UI.Page 
{ 
    SqlConnection con=new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString.ToString()); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      GetData(); 
     } 
    } 
    public void GetData() 
    { 
     SqlDataAdapter sda = new SqlDataAdapter("select * from EmpData", con); 
     DataTable dt = new DataTable(); 
     sda.Fill(dt); 
     GridView1.DataSource = dt; 
     GridView1.DataBind(); 
    } 

    protected void btnDownload_Click(object sender, EventArgs e) 
    { 
     GetData(); 
     exporttoexcel("Report.xls", GridView1); 
     GridView1 = null; 
     GridView1.Dispose(); 



    } 
    public void exporttoexcel(string filename,GridView gv) 
    { 
     Response.ClearContent(); 
     Response.AddHeader("content-disposition", "attachment;filename=" + filename); 
     Response.ContentType = "applicatio/excel"; 
     StringWriter sw = new StringWriter(); ; 
     HtmlTextWriter htm=new HtmlTextWriter(sw); 
     gv.RenderControl(htm); 
     Response.Write(sw.ToString()); 
     Response.End(); 
    } 
    public override void VerifyRenderingInServerForm(Control control) 
    { 

    } 
} 

}

-1

首先添加EPPLUS轉介ence庫導入應用程序並使用OfficeOpenXml添加;

//業務對象類

類bocls {

string name; 

    public string NAME 
    { 
     get { return name; } 
     set { name = value; } 
    } 
    string id; 

    public string ID 
    { 
     get { return id; } 
     set { id = value; } 
    } 



    public bocls() { } 
    public bocls(string name, string id) 
    { 
     this.name = name; 
     this.id = id;   

    } 

//出口按鈕單擊事件

保護無效lbtnExport_Click(對象發件人,EventArgs的){

  List<bocls> list6 = new List<bocls>(); 
      //copy the grid view values into list 
      list6 = (from row in dataGridView1.Rows.Cast<DataGridViewRow>() 
      from cell in row.Cells.Cast<DataGridViewCell>() 
      select new 
      { 
       //project into your new class from the row and cell vars. 
      }).ToList(); 
    } 
      ExcelPackage excel = new ExcelPackage(); 
      var workSheet = excel.Workbook.Worksheets.Add("Products"); 
      var totalCols = GridView1.Rows[0].Cells.Count; 
      var totalRows = GridView1.Rows.Count; 
      var headerRow = GridView1.HeaderRow; 
      for (var i = 1; i <= totalCols; i++) 
      { 
       workSheet.Cells[1, i].Value = headerRow.Cells[i - 1].Text; 
      } 
      for (var j = 1; j <= totalRows; j++) 
      { 
       for (var i = 1; i <= totalCols; i++) 
       { 
        var item = list6.ElementAt(j - 1); 

        workSheet.Column(1).Width = 13; 
        workSheet.Column(2).Width = 10; 

        workSheet.Cells[j + 1, i].Style.WrapText = true; 

        if (headerRow.Cells[i - 1].Text == "ID") 
         workSheet.Cells[j + 1, i].Value = item.GetType().GetProperty("id").GetValue(item, null); 
        else if (headerRow.Cells[i - 1].Text == "NAME") 
         workSheet.Cells[j + 1, i].Value = item.GetType().GetProperty("name").GetValue(item, null); 

        workSheet.Cells[j + 1, i].Value = workSheet.Cells[j + 1, i].Value.ToString().Replace("<br/>", ""); 
       } 
      } 
      using (var memoryStream = new MemoryStream()) 
      { 

       Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       string filename = Guid.NewGuid().ToString() + ".xlsx"; 
       Response.AddHeader("content-disposition", "attachment; filename=" + filename); 
       excel.SaveAs(memoryStream); 
       //add your destination folder 
       FileStream fileStream = new FileStream(@"C:\Users\karthi\Downloads\New folder\" + filename, FileMode.Create,FileAccess.Write,FileShare.Write); 
       memoryStream.WriteTo(fileStream); 
       fileStream.Close(); 
       memoryStream.WriteTo(Response.OutputStream); 
       memoryStream.Close(); 
       memoryStream.WriteTo(Response.OutputStream); 
       Response.Flush(); 
       Response.End(); 
      } 

    }