web-dev-qa-db-fra.com

Exporter un tableau HTML vers Excel à l'aide d'ASP.NET

J'ai une table html (pas Gridview) et qui n'a pas d'en-tête et de lignes appropriés. Au lieu de cela, il a une structure et des données personnalisées. Je souhaite exporter ce tableau vers Excel. Comment puis-je faire en utilisant ASP.NET? enter image description here

Les étiquettes sont du texte fixe et les valeurs entières proviennent de la base de données. Ainsi, la structure de la table est fixe, seules les valeurs entières/décimales changent.

13
hotcoder

Vous souhaitez exporter la structure et les données personnalisées du tableau HTML (pas Gridview) vers Excel à l'aide d'ASP.NET.

Essayez l'approche suivante

  1. Fournissez le ID et ajoutez runat="server" attribut

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

  2. Ajoutez le code suivant

    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();
    
9
Arun Singh

Vous pouvez utiliser le code ci-dessous:

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

Il est également conseillé de donner des CSS en ligne si vous voulez que la sortie exportée soit exactement la même que votre interface utilisateur. Si vous appliquez des classes CSS à la table, elle ne s'affichera pas dans Excel exporté.

4
user3215480

Si dtReport contient la table (c'est-à-dire les données à exporter), nous pouvons exporter la table vers Excel en utilisant le LOC suivant et nous pouvons également formater l'en-tête

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

l'utilisation du format MSO n'évitera pas les zéros non significatifs, mais il convertira le texte en chaîne, ce qui n'est pas recommandé pour effectuer des opérations.

1
Deepak Kothari

Il n'y a aucun moyen automatisé. Mais vous pouvez utiliser le même code pour créer la table et l'écrire à la place. Si vous l'écrivez comme un simple fichier CSV, l'utilisateur peut le charger dans Excel en cliquant simplement sur le fichier téléchargé.

En définissant les en-têtes appropriés, vous pouvez demander au navigateur de traiter le contenu comme un téléchargement au lieu d'une page Web. J'ai posté le code pour le faire dans cet article .

0
Jonathan Wood

Si vos données sont basées sur des données (sinon vous pourriez les stocker dans un fichier XML), alors regardez une question similaire que j'ai postée récemment.

Écriture de lignes DataReader dans un fichier Excel

0
IrishChieftain