2012-05-02 3 views
5

그리드 뷰의 데이터를 내보내는 엑셀 파일을 저장하고 싶습니다. 내가 gridview 데이터를 Excel로 내보내기 코드를 작성했지만 수출 된 파일을 저장하는 방법을 모르겠습니다. 다음엑셀 파일을 엑셀로 저장하고 엑셀 파일을 폴더로 저장합니다.

는 엑셀에있는 gridview를 내보낼 내 코드입니다 :

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

당신은 당신이 파일하지만 HTML 테이블을 Excel? Excel은 그것을 해석 할 수 있습니다. 어쨌든 실제 Excel 파일이 아닙니다. [EPPLus] (http://epplus.codeplex.com/releases/view/42439)를보십시오. –

+0

Tim은 EPPlus를 사용한다고 말합니다 - 실제 .xlsx 파일을 생성하는 라이브러리이며 대신 다운로드 할 수 있습니다. 나는 예산 모니터링 애플 리케이션을 위해 그것을 사용했고 그것은 훌륭합니다. – markp3rry

+0

그리드보기의 데이터 소스 란 무엇입니까? –

답변

10

당신은이 작업을 수행 할 수 있습니다 : 여기에 그 문제를 adresses 답변 몇은

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가있는 form 태그 안에 있어야합니다. :( – 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

이 날 전체 수출 - 투 - 엑셀 코드 작업을 도왔다. 유지에 대해 너무 확실하지 오전'VerifyRenderingInServerForm (제어 컨트롤)을 ANS있어 '빈. – AceMark

0
도움이 될 수 있습니다

다음 Folowed the link : C# Excel file OLEDB read HTML IMPORT

Extended Properties=\"HTML Import;HDR=No;IMEX=1 the select * from [tablename]을 사용하십시오. tablename은 GetOleDbSchemaTable에서 반환됩니다.

참고 : 정상적인 Excel은로드되지 않습니다. 사용하려면 Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\, 여기서 테이블 이름은 $입니다.

확인 샘플 코드 : Can't read excel file after creating it using File.WriteAllText() function

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 참조 라이브러리를 응용 프로그램에 추가하고 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(); 
      } 

    } 
관련 문제