2009-07-07 8 views
0

내가 파일 엑셀로 그리드보기의 내용을 변환하려고하고이 코드그리드보기로 엑셀

string attachment = "attachment; filename= " + FileName; 
Response.ClearContent(); 
Response.AddHeader("content-disposition", attachment); 
Response.ContentType = "application/excel"; 
StringWriter sw = new StringWriter(); 
HtmlTextWriter htw = new HtmlTextWriter(sw); 
gv.RenderControl(htw);   
Response.Write(sw.ToString()); 
Response.End(); 
를 사용하여 그 일을하고

문제는 내가있는 HTML의 어떤 종류를 얻고있다 스타일 서식을 능가한다. 페이지 링크 등에서 theres 자바 스크립트를 사용한다. 내 쿼리의 결과를 쉼표로 구분 된 파일로 바꾼다. 무료로 할 수 있는가? 아니면 직접 쿼리를 실행해야 하는가? CSV 스트림을 작성하십시오. 감사합니다.

답변

0

완전히 언더우드 질문을 던지십시오. 그러나 게시 한 코드 으로 작성해야 유효한 엑셀 파일을 만들 수 있습니다. 멀리 csv 파일을 만드는 것처럼 당신의 gridview에서 CSV 파일을 만들려면이 시도하십시오.

string attachment = "attachment; filename=test.csv"; 
Response.ClearContent(); 
Response.AddHeader("content-disposition", attachment); 

StringWriter sw = new StringWriter(); 
StringBuilder sb = sw.GetStringBuilder(); 

foreach (GridViewRow row in GridView1.Rows) 
{ 
    string[] values = new string[row.Cells.Count];    
    for (int i = 0; i < row.Cells.Count; i++) 
    {     
     values[i] = row.Cells[i].Text; 
    }    
    sb.AppendLine(String.Join(",", values)); 
} 

HtmlTextWriter htw = new HtmlTextWriter(sw);   
Response.Write(sw.ToString()); 
Response.End(); 
0

GridView 자체의 .RenderControl() 메소드를 활용하는 방법을 사용합니다. 선택적으로 열 또는 두 개를 숨길 수 있습니다.

public static void ExportGridToExcel(System.Web.UI.Page p_Page, System.Web.UI.WebControls.GridView p_GridView, int[] p_ColumnsToHide) 
    { 

    if (p_ColumnsToHide != null) 
    { 
     foreach (int i in p_ColumnsToHide) 
     { 
      p_GridView.Columns[i].Visible = false; 
     }//foreach 
    }//if 

    p_Page.Response.Clear(); 
    p_Page.Response.Buffer = true; 
    p_Page.Response.AddHeader("content-disposition", "attachment; filename=output.xls"); 
    p_Page.Response.ContentType = "application/vnd.ms-excel"; 
    p_Page.Response.Charset = string.Empty; 
    p_Page.EnableViewState = false; 

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

    p_GridView.RenderControl(oHtmlTextWriter); 
    p_Page.Response.Write(sw.ToString()); 
    p_Page.Response.End(); 

    } 

이 상자 밖으로 작동하지 않는 경우에, 당신은 ... 언급 수동으로 CSV 스트림을 작성 중 하나 몇 가지 다른 옵션이 있습니다 (I 탭 자신을 구분 선호) 다음 거짓말 어떤 종류의 파일을 보내고 있는지 브라우저에 알려서 Exhell에서 열어 보겠습니다. Exhell 2007은 유감스럽게도 사용자에게이 접근법에 대한 경고를 제공하므로 응용 프로그램에 따라이 방법이 유용 할 수도 있고 그렇지 않을 수도 있습니다.

다른 접근 방법 (무겁지 만)은 페이지에 다른 gridview를 놓고이 방법으로 전송하는 것입니다. 장점은 사용자가 화면에 보이는 것과 별도로 Excell 출력을 쉽게 사용자 정의 할 수 있다는 것입니다 (예 : 자바 스크립트 사용, 열 추가 등). 단점은? 물론 두 개의 gridviews.

행운을 빈다.