2012-02-20 72 views
11

Tôi có bảng html (Không phải Gridview) và không có Tiêu đề và hàng phù hợp. Thay vào đó, nó có cấu trúc và dữ liệu tùy chỉnh. Tôi muốn xuất bảng này sang Excel. Làm thế nào tôi có thể làm bằng cách sử dụng ASP.NET? enter image description hereXuất Bảng HTML sang Excel bằng ASP.NET

Nhãn là văn bản cố định và giá trị số nguyên đến từ cơ sở dữ liệu. Vì vậy, cấu trúc bảng được cố định chỉ thay đổi giá trị số nguyên/thập phân.

+1

điều này phải là một quá trình lặp lại? hoặc cắt và dán từ trang web của bạn một lần? – Randy

+2

Dữ liệu cho bảng đến từ đâu? – Didaxis

+0

Không giống như người khác, tôi sẽ giải thích sự bỏ phiếu của tôi: Đây là một câu hỏi không có đủ chi tiết để gợi ra câu trả lời thực tế về bất kỳ giá trị nào. Cung cấp thêm chi tiết, hoặc tôi nghi ngờ câu hỏi này sẽ được đóng lại – Didaxis

Trả lời

8

Bạn muốn xuất bảng HTML (Không phải Gridview) cấu trúc tùy chỉnh và dữ liệu sang Excel bằng ASP.NET.

Hãy thử các cách sau đây

  1. Cung cấp ID và thêm thuộc tính runat="server"

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

  2. Thêm mã sau

    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(); 
    
.210
+0

Rất tốt. Làm thế nào nếu tôi muốn đặt một hình ảnh trên tập tin excel, hoặc điền vào ô màu, vv Những gì tôi muốn nói là, định dạng tập tin excel sau khi xuất khẩu. – Haminteu

+0

Kiểm tra http://stackoverflow.com/questions/7172282/give-background-color-to-excel-sheet-in-asp-net/9858841#9858841 và http://stackoverflow.com/questions/9410401/adding này -custom-header-to-the-excel-file/9653194 # 9653194 –

+0

Tôi đang cố gắng sử dụng chức năng xuất từ ​​Phần Web Trực quan trong trang web SP của tôi. 'Response' đang cho tôi một lỗi. – SearchForKnowledge

0

Không có cách tự động. Nhưng bạn có thể sử dụng cùng một mã để tạo bảng và ghi nó vào đầu ra để thay thế. Nếu bạn viết nó dưới dạng tệp CSV đơn giản, thì người dùng có thể tải tệp đó vào Excel bằng cách chỉ cần nhấp vào tệp đã tải xuống.

Bằng cách đặt tiêu đề chính xác, bạn có thể hướng trình duyệt xử lý nội dung dưới dạng tải xuống thay vì trang web. Tôi đã đăng mã để làm điều này trong this article.

+1

Ai là người bỏ phiếu bozo xuống câu trả lời mà không cần giải thích? –

+0

Tôi không phải là bỏ phiếu xuống "bozo" :), nhưng có lẽ câu trả lời của bạn đã bị bỏ phiếu bởi vì OP tuyên bố rõ ràng điều này không có trong GridView -nor có OP ám chỉ nơi dữ liệu này đến từ đâu. Đối với tất cả chúng ta biết, đây là một bảng HTML trên một trang web mà OP không kiểm soát được. – Didaxis

+0

@ErOx: Có, lấy điểm. :) Vì OP cho biết anh ta sử dụng ASP.NET, tôi sẽ giả sử anh ta làm điều này từ trang web của riêng mình. Nhưng tôi đồng ý có sự mơ hồ về vấn đề này. –

2

Bạn có thể sử dụng mã dưới đây:

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

Ngoài ra nó là advicable để cung cấp cho inline css nếu bạn muốn đầu ra xuất khẩu nhìn chính xác giống như UI của bạn. Nếu bạn áp dụng các lớp css vào bảng thì nó sẽ không được hiển thị trong excel đã xuất.

+1

không nhất thiết bạn cần phải đặt CSS nội tuyến, bạn có thể thêm các lớp kiểu trong đầu và nó sẽ hoạt động bình thường – Kronass

1

Nếu dtReport chứa các bảng (tức là dữ liệu được xuất khẩu) thì chúng ta có thể xuất bảng vượt trội bằng LỘC sau và chúng tôi cũng có thể định dạng tiêu đề

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(); 
       } 
      } 

sử dụng MSO Format sẽ không được tránh hàng đầu của số không, nhưng nó sẽ chuyển đổi văn bản thành chuỗi không được khuyến khích để thực hiện các thao tác.

Các vấn đề liên quan