2012-02-20 2 views
11

HTML 표 (Not Gridview)가 있으며 올바른 머리글과 행이 없습니다. 대신 구조 및 데이터를 사용자 정의했습니다. 이 테이블을 Excel로 내보내려고합니다. ASP.NET을 어떻게 사용합니까? enter image description hereASP.NET을 사용하여 HTML 표를 Excel로 내보내기

레이블은 고정 텍스트이고 정수 값은 데이터베이스에서 가져옵니다. 따라서 테이블 구조는 정수/십진 값만 변경됩니다.

+1

이것은 반복 가능한 프로세스 여야합니까? 또는 귀하의 웹 페이지에서 한 번 잘라 붙이기가 가능합니까? – Randy

+2

테이블에 대한 데이터는 어디에서 비롯 되었습니까? – Didaxis

+0

다른 사람과 달리, 나는 아래쪽 투표를 설명 할 것입니다. 이것은 어떤 값에 대한 실제 답변을 도출 할만큼 충분한 세부 사항이없는 가난한 질문입니다. 자세한 내용을 제공하거나이 질문이 닫힐 것으로 의심됩니다. – Didaxis

답변

8

ASP.NET을 사용하여 HTML 표 (Not Gridview) 사용자 지정 구조 및 데이터를 Excel로 내보내려는 경우

<table id="tbl" runat="server" >

  • 다음 코드

    Response.ContentType = "application/x-msexcel"; 
    Response.AddHeader("Content-Disposition", "attachment; 
    filename=ExcelFile.xls"); 
    Response.ContentEncoding = Encoding.UTF8; 
    StringWriter tw = new StringWriter(); 
    HtmlTextWriter hw = new HtmlTextWriter(tw); 
    tbl.RenderControl(hw); 
    Response.Write(tw.ToString()); 
    Response.End(); 
    
  • ,691에게 추가 runat="server"이 속성

    1. ID를 제공하는 다음 접근을 시도하고 추가

    +0

    아주 좋습니다. Excel 파일에 이미지를 넣거나 셀 등에 색상을 채우려면 어떻게해야합니까? 내가 말하고자하는 것은 내보낼 때 Excel 파일의 형식을 지정하는 것입니다. – Haminteu

    +0

    확인하기 http://stackoverflow.com/questions/7172282/give-background-color-to-excel-sheet-in-asp-net/9858841#9858841 및 http://stackoverflow.com/questions/9410401/adding -custom-header-to-the-excel-file/9653194 # 9653194 –

    +0

    내 SP 사이트의 비주얼 웹 파트에서 내보내기 기능을 사용하려고합니다. '응답'은 나에게 오류를주고있다. – SearchForKnowledge

    0

    자동화 된 방법은 없습니다. 그러나 동일한 코드를 사용하여 테이블을 생성하고 대신 출력에 쓸 수 있습니다. 간단한 CSV 파일로 작성하면 다운로드 한 파일을 클릭하기 만하면 Excel에로드 할 수 있습니다.

    올바른 헤더를 설정하면 웹 페이지 대신 다운로드로 콘텐츠를 처리하도록 브라우저에 지시 할 수 있습니다. this article에 코드를 게시했습니다.

    +1

    설명없이 답변을 투표하는 사람은 누구입니까? –

    +0

    나는 아래쪽 투표 "bozo"가 아니지만, OP가 명시 적으로 GridView에 없다고 말했기 때문에 대답이 아래로 내려갔습니다. - 또는 OP가이 데이터의 출처를 암시합니다. 우리가 알고있는 한, OP가 통제 할 수없는 사이트의 HTML 테이블입니다. – Didaxis

    +0

    @ErOx : 예, 찍었습니다. :) OP가 그가 ASP를 사용하고 있다고 말했다.NET, 나는 그가 자신의 사이트에서 이것을한다고 가정 할 것이다. 그러나 나는이 문제에 모호함이 있다는 데 동의한다. –

    2

    당신은 코드 아래 사용할 수 있습니다

    Response.ContentType = "application/force-download"; 
    Response.AddHeader("content-disposition", "attachment; filename=Print.xls"); 
    Response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">"); 
    Response.Write("<head>"); 
    Response.Write("<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-  8\">"); 
    Response.Write("<!--[if gte mso 9]><xml>"); 
    Response.Write("<x:ExcelWorkbook>"); 
    Response.Write("<x:ExcelWorksheets>"); 
    Response.Write("<x:ExcelWorksheet>"); 
    Response.Write("<x:Name>Report Data</x:Name>"); 
    Response.Write("<x:WorksheetOptions>"); 
    Response.Write("<x:Print>"); 
    Response.Write("<x:ValidPrinterInfo/>"); 
    Response.Write("</x:Print>"); 
    Response.Write("</x:WorksheetOptions>"); 
    Response.Write("</x:ExcelWorksheet>"); 
    Response.Write("</x:ExcelWorksheets>"); 
    Response.Write("</x:ExcelWorkbook>"); 
    Response.Write("</xml>"); 
    Response.Write("<![endif]--> "); 
    StringWriter tw = new StringWriter(); 
    HtmlTextWriter hw = new HtmlTextWriter(tw);  
    tbl.RenderControl(hw); 
    Response.Write(tw.ToString()); 
    Response.Write("</head>"); 
    Response.flush(); 
    

    또한 당신이 보낸 출력이 UI와 완전히 동일하게 표시하려면 인라인 CSS를 제공하는 advicable입니다. 표에 CSS 클래스를 적용하면 내 보낸 Excel에 표시되지 않습니다. dtReport 테이블을 (즉, 데이터를 내보낼 수) MSO 형식을 사용하여

    if (dtReports != null && dtReports.Rows.Count > 0 && !string.IsNullOrEmpty(formName)) 
          { 
           string filename = formName.ToUpper() + ParsConstant.XLS_EXTENSION; 
           StringWriter tw = new StringWriter(); 
    
           using (HtmlTextWriter hw = new HtmlTextWriter(tw)) 
           { 
    
            //Binding Datatable to DataGrid. 
            DataGrid dgGrid = new DataGrid(); 
            dgGrid.DataSource = dtReports; 
            dgGrid.DataBind(); 
    
            //Some Properties for the Header 
            dgGrid.HeaderStyle.Font.Bold = true; 
            dgGrid.HeaderStyle.Font.Size = 13; 
    
            //Get the HTML for the control. 
            dgGrid.RenderControl(hw); 
    
    
            Response.ContentType = "application/vnd.ms-excel"; 
            Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + ""); 
            //Response.Write("<style> TD { mso-number-format:\\@; } </style>"); 
    
    
            Response.Write(tw.ToString()); 
            Response.End(); 
           } 
          } 
    

    피하는되지 않습니다 헤더를 우리는 다음과 같은 LOC를 사용하여 Excel로 테이블을 내보낼 수 있으며, 우리가 포맷 할 수 있습니다 포함되어있는 경우

    +1

    반드시 인라인 CSS를 넣을 필요는 없습니다. 머리에 스타일 클래스를 추가하면 정상적으로 작동합니다. – Kronass

    1

    선행 제로하지만, 작업을 수행하는 것이 바람직하지 않은 문자열로 텍스트를 변환합니다.