簡體   English   中英

使用ASP.NET將HTML表導出到Excel

[英]Export HTML Table to Excel using ASP.NET

我有一個html表(非Gridview),沒有正確的標題和行。 相反,它具有定制的結構和數據。 我想將此表導出到Excel。 我該如何使用ASP.NET? 在此輸入圖像描述

標簽是固定文本,整數值來自數據庫。 所以表結構只修改了整數/小數值的變化。

您希望使用ASP.NET將HTML表格(非Gridview)自定義結構和數據導出到Excel。

請嘗試以下方法

  1. 提供ID並添加runat="server"屬性

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

  2. 添加以下代碼

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

您可以使用以下代碼:

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。 如果將css類應用於表,則它不會顯示在導出的excel中。

如果dtReport包含表(即要導出的數據),那么我們可以使用以下LOC將表導出到excel,並且我們也可以格式化標題

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

使用MSO格式不會避免前導零,但它會將文本轉換為字符串,這不適合進行操作。

如果您的數據是數據庫(如果不是,您可以存儲在XML文件中),那么請查看我最近發布的類似問題。

將DataReader行寫入Excel文件

沒有自動化的方式。 但是您可以使用相同的代碼來創建表並將其寫入輸出。 如果您將其寫為簡單的CSV文件,則用戶只需單擊下載的文件即可將其加載到Excel中。

通過設置正確的標題,您可以指示瀏覽器將內容視為下載而不是網頁。 我在本文中發布了代碼來執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM