Passer au contenu du pied de page
UTILISATION D'IRONXL

Comment exporter un tableau HTML vers Excel en C# avec IronXL

L'extraction des données d'un tableau HTML et leur conversion en feuille Excel est une exigence courante dans les applications d'entreprise, que ce soit pour la migration de données, la génération de rapports ou les pages Web nécessitant une analyse plus approfondie. Ce guide fournit des étapes claires pour exporter des données de tableaux HTML au format Excel à l'aide IronXL et de HTML Agility Pack .

Lorsque vous devez exporter un tableau HTML vers Excel, il est essentiel de comprendre la relation entre les structures des feuilles de calcul Excel et les tableaux HTML. Ce guide montre comment transférer efficacement les données des tableaux HTML vers le format Excel, en créant des sorties de feuilles de calcul Excel professionnelles qui préservent l'intégrité des données.

IronXL offre une méthode flexible pour convertir le contenu d'un tableau HTML en une feuille de calcul Excel, en combinant ses puissantes capacités de manipulation Excel avec l'analyse HTML pour exporter un tableau HTML vers Excel en C#. Que vous ayez besoin de télécharger des données à partir d'une URL ou de traiter du contenu provenant d'une base de données, cette solution gère différents scénarios d'entrée sans nécessiter l'installation de Microsoft Office sur la machine.

Pourquoi utiliser IronXL pour exporter des données de tableau HTML ?

IronXL excelle dans la création et la manipulation de fichiers Excel sans nécessiter l'installation de Microsoft Office , ce qui le rend idéal pour les environnements serveur et les applications multiplateformes. Associé à HTML Agility Pack , un analyseur de fichiers et de contenu HTML performant, IronXL devient une solution polyvalente pour convertir n'importe quelle structure de tableau HTML en données de feuille Excel. Cette approche fonctionne bien avec les applications .NET 10 et peut gérer efficacement de grands ensembles de données.

Contrairement aux bibliothèques telles que XlsIO de la bibliothèque Excel Syncfusion, qui offre une fonction ImportHtmlTable limitée à des formats HTML et des structures de tableau spécifiques, l'approche IronXL donne aux développeurs un contrôle complet sur le processus d'analyse et de conversion. Cette flexibilité signifie que les développeurs peuvent gérer des scénarios complexes tels que des tables imbriquées, des formats de données personnalisés et l'extraction de colonnes sélectives que les méthodes intégrées rigides ne peuvent pas accueillir.

IronXL offre également une suite complète de fonctionnalités Excel, notamment la prise en charge des formules , la mise en forme des cellules , la gestion de plusieurs feuilles de calcul et divers formats d'exportation (XLSX, XLS, JSON et CSV). Vous pouvez créer des graphiques, exporter au format PDF et gérer les données des champs cachés, ce qui en fait une solution complète pour l'automatisation d'Excel, allant bien au-delà de la simple conversion de tableaux HTML.

Comment installer les bibliothèques requises ?

Installez IronXL et HTML Agility Pack via le gestionnaire de packages NuGet . IronXL propose un essai gratuit pour tester toutes les fonctionnalités avant de souscrire à une licence.

Console du Gestionnaire de Packages

Install-Package IronXl.Excel
Install-Package HtmlAgilityPack
Install-Package IronXl.Excel
Install-Package HtmlAgilityPack
SHELL

.NET CLI

dotnet add package IronXl.Excel
dotnet add package HtmlAgilityPack
dotnet add package IronXl.Excel
dotnet add package HtmlAgilityPack
SHELL

Ces packages NuGet vous permettent de créer, charger et enregistrer des documents Excel programmatiquement. Après avoir installé les deux packages, ajoutez les instructions using nécessaires en haut de votre fichier C# :

using IronXL;
using HtmlAgilityPack;
using System;
using System.Linq;
using IronXL;
using HtmlAgilityPack;
using System;
using System.Linq;
$vbLabelText   $csharpLabel

Ces bibliothèques fonctionnent bien ensemble : HTML Agility Pack gère l'analyse HTML tandis IronXL gère la création et la manipulation des fichiers Excel. Cet exemple illustre une méthode claire pour convertir des tableaux HTML au format XLSX.

Comment analyser les données d'un tableau HTML avec HTML Agility Pack ?

HTML Agility Pack offre une méthode simple pour naviguer dans les documents HTML à l'aide d'expressions XPath. Le code suivant montre comment extraire des données d'une table HTML et les préparer pour l'exportation :

// Sample HTML table with product data
string htmlContent = @"
<table>
    <thead>
        <tr>
            <th>Product</th>
            <th>Price</th>
            <th>Stock</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Laptop</td>
            <td>$999</td>
            <td>15</td>
        </tr>
        <tr>
            <td>Mouse</td>
            <td>$25</td>
            <td>50</td>
        </tr>
        <tr>
            <td>Keyboard</td>
            <td>$75</td>
            <td>30</td>
        </tr>
    </tbody>
</table>";

// Load HTML document for parsing
var doc = new HtmlDocument();
doc.LoadHtml(htmlContent);

// Select the HTML table element using XPath
var table = doc.DocumentNode.SelectSingleNode("//table");
// Sample HTML table with product data
string htmlContent = @"
<table>
    <thead>
        <tr>
            <th>Product</th>
            <th>Price</th>
            <th>Stock</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Laptop</td>
            <td>$999</td>
            <td>15</td>
        </tr>
        <tr>
            <td>Mouse</td>
            <td>$25</td>
            <td>50</td>
        </tr>
        <tr>
            <td>Keyboard</td>
            <td>$75</td>
            <td>30</td>
        </tr>
    </tbody>
</table>";

// Load HTML document for parsing
var doc = new HtmlDocument();
doc.LoadHtml(htmlContent);

// Select the HTML table element using XPath
var table = doc.DocumentNode.SelectSingleNode("//table");
$vbLabelText   $csharpLabel

Ce code charge le contenu HTML dans un objet HtmlDocument et utilise XPath pour interroger et sélectionner l'élément de tableau. La méthode SelectSingleNode renvoie le premier tableau trouvé dans le code HTML, ce qui facilite le ciblage de tableaux spécifiques lorsqu'il y en a plusieurs. Chaque ligne du tableau est ensuite traitée pour extraire la valeur de la cellule en vue de la conversion.

Quelles expressions XPath sont les plus performantes pour l'analyse de tableaux ?

Pour les tableaux HTML standard, l'expression XPath //table sélectionne le premier tableau du document. Lorsque vous travaillez avec des pages plus complexes contenant plusieurs tableaux, vous pouvez utiliser des sélecteurs positionnels tels que (//table)[2] pour cibler un tableau spécifique par son index. Les sélecteurs basés sur des attributs comme //table[@id='data-table'] ou //table[@class='products'] sont également utiles lorsque les tables contiennent des identifiants significatifs.

Lorsque le code HTML provient d'une URL active, vous pouvez charger le document directement à l'aide de la classe HtmlWeb :

var web = new HtmlWeb();
var remoteDoc = web.Load("https://example.com/data-page");
var remoteTable = remoteDoc.DocumentNode.SelectSingleNode("//table[@class='data-table']");
var web = new HtmlWeb();
var remoteDoc = web.Load("https://example.com/data-page");
var remoteTable = remoteDoc.DocumentNode.SelectSingleNode("//table[@class='data-table']");
$vbLabelText   $csharpLabel

Cela vous permet d'extraire des tableaux directement à partir de pages web publiques sans avoir à enregistrer manuellement le code HTML au préalable.

Comment exporter des données analysées vers Excel à l'aide IronXL?

Avec IronXL, vous pouvez convertir les données d'un tableau HTML analysé en une feuille de calcul Excel professionnelle avec une mise en forme appropriée. Le code suivant montre comment exporter les données avec un style personnalisé :

// Create a new Excel workbook
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet workSheet = workBook.CreateWorkSheet("Exported Data");

// Extract and write headers
var headers = table.SelectNodes(".//thead/tr/th");
if (headers != null)
{
    for (int col = 0; col < headers.Count; col++)
    {
        workSheet.SetCellValue(0, col, headers[col].InnerText.Trim());

        // Apply header formatting
        var headerCell = workSheet.GetCellAt(0, col);
        headerCell.Style.Font.Bold = true;
        headerCell.Style.BackgroundColor = "#4CAF50";
    }
}

// Extract and write data rows
var rows = table.SelectNodes(".//tbody/tr");
if (rows != null)
{
    for (int row = 0; row < rows.Count; row++)
    {
        var cells = rows[row].SelectNodes("td");
        if (cells != null)
        {
            for (int col = 0; col < cells.Count; col++)
            {
                string cellValue = cells[col].InnerText.Trim();
                workSheet.SetCellValue(row + 1, col, cellValue);
            }
        }
    }
}

// Auto-fit columns for better readability
for (int col = 0; col < headers?.Count; col++)
{
    workSheet.AutoSizeColumn(col);
}

// Save the Excel file
workBook.SaveAs("ExportedTable.xlsx");
// Create a new Excel workbook
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet workSheet = workBook.CreateWorkSheet("Exported Data");

// Extract and write headers
var headers = table.SelectNodes(".//thead/tr/th");
if (headers != null)
{
    for (int col = 0; col < headers.Count; col++)
    {
        workSheet.SetCellValue(0, col, headers[col].InnerText.Trim());

        // Apply header formatting
        var headerCell = workSheet.GetCellAt(0, col);
        headerCell.Style.Font.Bold = true;
        headerCell.Style.BackgroundColor = "#4CAF50";
    }
}

// Extract and write data rows
var rows = table.SelectNodes(".//tbody/tr");
if (rows != null)
{
    for (int row = 0; row < rows.Count; row++)
    {
        var cells = rows[row].SelectNodes("td");
        if (cells != null)
        {
            for (int col = 0; col < cells.Count; col++)
            {
                string cellValue = cells[col].InnerText.Trim();
                workSheet.SetCellValue(row + 1, col, cellValue);
            }
        }
    }
}

// Auto-fit columns for better readability
for (int col = 0; col < headers?.Count; col++)
{
    workSheet.AutoSizeColumn(col);
}

// Save the Excel file
workBook.SaveAs("ExportedTable.xlsx");
$vbLabelText   $csharpLabel

Ce code démontre l'API intuitive d'IronXL pour la manipulation Excel en C#. Il crée un nouveau classeur et une nouvelle feuille de calcul , puis parcourt les en-têtes de tableau HTML analysés, en les plaçant dans la première ligne tout en appliquant une mise en forme en gras et une couleur de fond verte. Les lignes de données du tableau HTML sont traitées ligne par ligne, le contenu textuel de chaque cellule étant extrait et placé dans la cellule Excel correspondante. La fonction AutoSizeColumn garantit que tout le contenu est visible et que le classeur est enregistré au format XLSX.

C# Exporter un tableau HTML vers un fichier Excel avec IronXL: Image 1 - Données du tableau analysées par IronXL

Vous pouvez voir ici le tableau HTML original comparé au résultat du code ci-dessus :

C# Exporter un tableau HTML vers un fichier Excel avec IronXL: Image 2 - Données Excel analysées vs. le tableau HTML d'origine

Comment appliquer une mise en forme aux cellules des données exportées ?

Au-delà des couleurs de fond et de gras de base présentées ci-dessus, IronXL vous offre un contrôle précis sur le style des cellules . Vous pouvez définir la taille de la police, la famille de polices, l'alignement du texte, les bordures et les formats numériques pour n'importe quelle cellule ou plage :

// Apply number formatting to a price column (column index 1)
var priceRange = workSheet[$"B2:B{rows.Count + 1}"];
priceRange.FormatString = "$#,##0.00";

// Set font size on all header cells
var headerRange = workSheet[$"A1:{(char)('A' + headers.Count - 1)}1"];
headerRange.Style.Font.Height = 13; // in half-points, so 13 = 6.5pt
// Apply number formatting to a price column (column index 1)
var priceRange = workSheet[$"B2:B{rows.Count + 1}"];
priceRange.FormatString = "$#,##0.00";

// Set font size on all header cells
var headerRange = workSheet[$"A1:{(char)('A' + headers.Count - 1)}1"];
headerRange.Style.Font.Height = 13; // in half-points, so 13 = 6.5pt
$vbLabelText   $csharpLabel

Pour les largeurs de colonnes, AutoSizeColumn gère la plupart des cas, mais vous pouvez également définir des largeurs explicites à l'aide de la méthode SetColumnWidth lorsque vous avez besoin d'une mise en page précise. Ces options de style font partie de la même API IronXL qui gère les styles de police des cellules dans le reste de votre classeur.

Comment gérez-vous plusieurs tables et les scénarios d'erreur ?

Lorsque vous travaillez avec plusieurs tableaux sur une seule page, utilisez SelectNodes("//table") pour récupérer tous les tableaux et les parcourir, en créant une feuille de calcul distincte pour chacun :

var tables = doc.DocumentNode.SelectNodes("//table");
if (tables != null)
{
    for (int t = 0; t < tables.Count; t++)
    {
        WorkSheet ws = workBook.CreateWorkSheet($"Table_{t + 1}");
        var tblHeaders = tables[t].SelectNodes(".//thead/tr/th");
        var tblRows = tables[t].SelectNodes(".//tbody/tr");

        if (tblHeaders != null)
        {
            for (int col = 0; col < tblHeaders.Count; col++)
            {
                ws.SetCellValue(0, col, tblHeaders[col].InnerText.Trim());
                ws.GetCellAt(0, col).Style.Font.Bold = true;
            }
        }

        if (tblRows != null)
        {
            for (int row = 0; row < tblRows.Count; row++)
            {
                var cells = tblRows[row].SelectNodes("td");
                if (cells != null)
                {
                    for (int col = 0; col < cells.Count; col++)
                    {
                        ws.SetCellValue(row + 1, col, cells[col].InnerText.Trim());
                    }
                }
            }
        }
    }
}

workBook.SaveAs("MultiTableExport.xlsx");
var tables = doc.DocumentNode.SelectNodes("//table");
if (tables != null)
{
    for (int t = 0; t < tables.Count; t++)
    {
        WorkSheet ws = workBook.CreateWorkSheet($"Table_{t + 1}");
        var tblHeaders = tables[t].SelectNodes(".//thead/tr/th");
        var tblRows = tables[t].SelectNodes(".//tbody/tr");

        if (tblHeaders != null)
        {
            for (int col = 0; col < tblHeaders.Count; col++)
            {
                ws.SetCellValue(0, col, tblHeaders[col].InnerText.Trim());
                ws.GetCellAt(0, col).Style.Font.Bold = true;
            }
        }

        if (tblRows != null)
        {
            for (int row = 0; row < tblRows.Count; row++)
            {
                var cells = tblRows[row].SelectNodes("td");
                if (cells != null)
                {
                    for (int col = 0; col < cells.Count; col++)
                    {
                        ws.SetCellValue(row + 1, col, cells[col].InnerText.Trim());
                    }
                }
            }
        }
    }
}

workBook.SaveAs("MultiTableExport.xlsx");
$vbLabelText   $csharpLabel

Que faire lorsque le code HTML est malformé ?

Le code HTML utilisé dans le monde réel n'est pas toujours valide. Les pages extraites de sources externes peuvent avoir des balises de fermeture manquantes, des structures tbody incohérentes ou des éléments th et td mélangés dans la ligne d'en-tête. HTML Agility Pack est conçu pour être tolérant et analysera la plupart des codes HTML malformés sans générer d'exceptions, mais vos sélecteurs XPath peuvent ne pas correspondre à ce que vous attendez.

Une méthode sûre consiste à encapsuler la logique d'analyse dans un bloc try-catch et à ajouter une solution de repli qui recherche les éléments tr directement sous le tableau lorsqu'aucun élément thead n'est trouvé :

try
{
    var headerNodes = table.SelectNodes(".//thead/tr/th")
                     ?? table.SelectNodes(".//tr[1]/th")
                     ?? table.SelectNodes(".//tr[1]/td");

    var dataRows = table.SelectNodes(".//tbody/tr")
                  ?? table.SelectNodes(".//tr[position()>1]");

    // ... process as normal
}
catch (Exception ex)
{
    Console.WriteLine($"Table parsing failed: {ex.Message}");
}
try
{
    var headerNodes = table.SelectNodes(".//thead/tr/th")
                     ?? table.SelectNodes(".//tr[1]/th")
                     ?? table.SelectNodes(".//tr[1]/td");

    var dataRows = table.SelectNodes(".//tbody/tr")
                  ?? table.SelectNodes(".//tr[position()>1]");

    // ... process as normal
}
catch (Exception ex)
{
    Console.WriteLine($"Table parsing failed: {ex.Message}");
}
$vbLabelText   $csharpLabel

IronXL gère automatiquement la détection du type de données, convertissant les chaînes numériques en nombres lorsque cela est approprié. Pour des scénarios plus complexes impliquant du contenu rendu en JavaScript, vous pouvez combiner cette approche avec des outils comme Selenium WebDriver ou Playwright pour d'abord rendre la page, puis transmettre le code HTML résultant à HTML Agility Pack pour analyse.

Comment enregistrer et exporter un fichier Excel ?

IronXL prend en charge de multiples formats de sortie autres que XLSX. Vous pouvez enregistrer au format XLS, CSV, TSV ou JSON en fonction des exigences en aval. Vous pouvez également diffuser la sortie directement vers une réponse HTTP dans ASP.NET Core, ce qui évite d'écrire un fichier sur le disque :

// Save to disk as XLSX
workBook.SaveAs("ExportedTable.xlsx");

// Save as CSV
workBook.SaveAsCsv("ExportedTable.csv");

// Stream to HTTP response (ASP.NET Core)
// Response.Headers["Content-Disposition"] = "attachment; filename=ExportedTable.xlsx";
// workBook.SaveAs(Response.BodyWriter.AsStream());
// Save to disk as XLSX
workBook.SaveAs("ExportedTable.xlsx");

// Save as CSV
workBook.SaveAsCsv("ExportedTable.csv");

// Stream to HTTP response (ASP.NET Core)
// Response.Headers["Content-Disposition"] = "attachment; filename=ExportedTable.xlsx";
// workBook.SaveAs(Response.BodyWriter.AsStream());
$vbLabelText   $csharpLabel

Lors de la diffusion vers une réponse HTTP, assurez-vous que l'en-tête Content-Disposition est défini sur attachment afin que le navigateur traite la réponse comme un téléchargement de fichier. Ce modèle fonctionne aussi bien avec les contrôleurs MVC qu'avec les pages Razor .

Pour les scénarios où vous devez exporter des données vers un modèle Excel existant , IronXL peut charger un classeur existant et remplir des plages nommées ou des adresses de cellules spécifiques avec les données HTML analysées, en préservant toute la mise en forme du modèle.

Quelles sont les meilleures pratiques pour une utilisation en production ?

Pratiques recommandées lors de l'exportation de tableaux HTML vers Excel en production
Préoccupation Recommandation Remarques
grands ensembles de données Traiter les lignes par lots IronXL gère des milliers de lignes, mais la sortie en flux continu évite la surcharge de la mémoire.
HTML malformé Utilisez des sélecteurs XPath de repli HTML Agility Pack est tolérant ; ajoutez des vérifications de valeur nulle explicites sur tous les appels SelectNodes
Contenu dynamique Pré-rendu avec Selenium ou Playwright Les pages contenant beaucoup de JavaScript nécessitent un navigateur sans interface graphique avant l'analyse HTML.
Format de fichier Je préfère XLSX à XLS. XLSX prend en charge davantage de lignes, des valeurs de cellule plus importantes et des fonctionnalités de style modernes.
Largeurs des colonnes Appelez AutoSizeColumn après avoir écrit toutes les données L'appel de cette fonction avant l'écriture des données entraînera un sous-dimensionnement des colonnes.
Licence Définir la clé de licence au démarrage Appelez `IronXl.License.LicenseKey = "...";` avant tout appel IronXL

Lors du traitement du contenu provenant d'une URL ou d'une requête de base de données en vue d'une analyse plus approfondie, tenez compte des détails supplémentaires tels que les valeurs des champs cachés ou les exigences de formatage particulières. Le comportement par défaut convient parfaitement aux tableaux standard, mais vous pouvez personnaliser la taille de la police, la famille de polices et d'autres propriétés de style pour chaque colonne ou pour chaque ligne de tableau spécifique.

Pour la lecture des données à partir de fichiers Excel après exportation, IronXL utilise la même API WorkBook.Load, ce qui simplifie les flux de travail aller-retour. Vous pouvez également convertir le fichier Excel obtenu en d'autres formats tels que JSON ou XML pour un traitement ultérieur.

Comment gérez-vous les licences et le déploiement ?

IronXL nécessite une clé de licence pour une utilisation en production. L' essai gratuit inclut toutes les fonctionnalités et est idéal pour évaluer la bibliothèque avant de l'acheter. Explorez les options de tarification et de licence pour trouver le niveau qui convient le mieux à votre équipe.

Pour un déploiement dans des environnements Docker, Azure Functions ou Linux, IronXL ne dépend pas de Microsoft Office ni de l'interopérabilité COM, ce qui simplifie sa gestion. Il prend en charge .NET 10 , .NET 9, .NET 8, .NET Framework 4.6.2+ et est entièrement compatible avec les modèles d'exportation ASP.NET Core actuels.

L'association d' IronXL et d'HTML Agility Pack offre une solution flexible pour l'exportation de tableaux HTML vers Excel en C#. L'approche présentée ici offre un contrôle plus précis que les méthodes intégrées rigides, vous permettant de gérer des structures HTML complexes tout en tirant parti de l'ensemble des fonctionnalités Excel d'IronXL.

Que vous créiez des robots d'extraction de données Web, migriez des données existantes à partir d'une base de données, automatisiez la génération de rapports ou effectuiez des analyses de données sur de grands ensembles de données, cette solution s'adapte aux besoins des entreprises. Les exemples de code montrent comment gérer différentes sources d'entrée, des chaînes HTML statiques au contenu dynamique récupéré via une URL. Les résultats peuvent être exportés pour être téléchargés ou traités ultérieurement dans votre application .NET .

Prêt à transformer vos données HTML en fichiers Excel professionnels ? Démarrez votre essai gratuit d' IronXL dès aujourd'hui et découvrez la flexibilité de la manipulation programmatique d'Excel sans dépendance à Office.

Questions Fréquemment Posées

Quel est l'objectif principal de la conversion des tableaux HTML en Excel dans les applications professionnelles ?

L'objectif principal est de faciliter la migration des données, la génération de rapports ou l'analyse approfondie des données des pages web en transformant les données des tableaux HTML dans un format facilement gérable et analysable dans Excel.

Quelle bibliothèque le guide suggère-t-il pour convertir des tableaux HTML en Excel en C# ?

Le guide suggère d'utiliser IronXL pour convertir des tableaux HTML en Excel dans C#, car il offre une approche flexible sans avoir besoin de Microsoft Office.

Pourquoi certaines bibliothèques ne sont-elles pas adaptées à la conversion de tableaux HTML en Excel ?

Certaines bibliothèques peuvent ne pas convenir parce qu'elles sont limitées en termes de formats de fichiers ou qu'elles manquent de fonctions d'assistance, ce qui peut limiter leur efficacité dans la gestion de divers besoins de conversion de données.

L'utilisation d'IronXl.Excel pour l'exportation de tableaux HTML vers Excel nécessite-t-elle l'utilisation de Microsoft Office ?

Non, Microsoft Office n'est pas nécessaire pour utiliser IronXL. Il fonctionne sur plusieurs plateformes et fournit une solution flexible pour exporter des tableaux HTML vers Excel.

IronXL peut-il prendre en charge les conversions multiplateformes de tableaux HTML vers Excel ?

Oui, IronXL peut gérer des conversions multiplateformes de tableaux HTML vers Excel, ce qui en fait un outil polyvalent pour les développeurs travaillant dans différents environnements.

Quels sont les cas d'utilisation courants pour la conversion de tableaux HTML en Excel ?

Les cas d'utilisation courants comprennent la migration de données, la génération de rapports et l'analyse de données de pages web dans un format plus structuré et plus accessible.

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me