Passer au contenu du pied de page
UTILISATION D'IRONXL

Comment exporter un GridView vers Excel avec mise en forme en C#

L'exportation des données GridView vers Excel tout en préservant les couleurs, les polices, l'alternance des arrière-plans de lignes et les bordures est une exigence qui apparaît dans presque toutes les applications ASP.NET ou Windows Forms basées sur les données. L'approche traditionnelle -- utilisant HtmlTextWriter et StringWriter pour rendre le contrôle en HTML -- produit des fichiers qui contiennent des avertissements de format dans Excel et échouent silencieusement pour les utilisateurs. IronXL résout ce problème en générant des fichiers XLSX natifs entièrement en C#, sans aucune dépendance à Microsoft Office, vous offrant ainsi un contrôle précis sur le style de chaque cellule.

Comment installer la bibliothèque dans un projet .NET ?

Installez IronXL depuis NuGet avant d'écrire tout code d'exportation. Ouvrez la console du gestionnaire de packages et exécutez :

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

IronXL prend en charge .NET 8, .NET 9 et .NET 10, ainsi que .NET Framework 4.6.2 et versions ultérieures. Après l'installation, ajoutez les directives using suivantes à tout fichier effectuant des opérations Excel :

using IronXL;
using IronXl.Styles;
using IronXL;
using IronXl.Styles;
$vbLabelText   $csharpLabel

Aucun environnement d'exécution supplémentaire ni interopérabilité Office n'est requis. La bibliothèque génère des fichiers binaires XLSX natifs qui s'ouvrent sans problème dans Microsoft Excel, LibreOffice Calc et Google Sheets.

Comment exporter un contrôle DataGridView Windows Forms vers Excel en conservant la mise en forme des cellules ?

Les applications Windows Forms utilisent le contrôle DataGridView plutôt que le contrôle Web GridView. Le modèle d'exportation est le même dans les deux cas : extraire les valeurs des lignes et des cellules, créer un classeur IronXL, appliquer des styles, puis enregistrer ou diffuser le résultat.

L'approche la plus fiable consiste à convertir la propriété DataSource du contrôle en DataTable afin d'éviter d'itérer sur les lignes visuelles, qui peuvent être filtrées ou paginées :

using IronXL;
using IronXl.Styles;
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;

DataTable dt = (DataTable)dataGridView1.DataSource;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;

// Header row -- bold, blue background, white text
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    var cell = sheet.GetCellAt(0, col);
    cell.Style.Font.Bold = true;
    cell.Style.SetBackgroundColor("#4472C4");
    cell.Style.Font.Color = "#FFFFFF";
    cell.Style.BottomBorder.Type = BorderType.Thin;
}

// Data rows -- alternating row color
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        string value = dt.Rows[row][col]?.ToString() ?? string.Empty;
        sheet.SetCellValue(row + 1, col, value);

        var cell = sheet.GetCellAt(row + 1, col);
        cell.Style.SetBackgroundColor(row % 2 == 0 ? "#D6DCE5" : "#FFFFFF");
        cell.Style.BottomBorder.Type = BorderType.Thin;
    }
}

// Save via dialog
using var saveDialog = new SaveFileDialog
{
    Filter = "Excel Files|*.xlsx",
    FileName = "GridViewExport.xlsx"
};

if (saveDialog.ShowDialog() == DialogResult.OK)
{
    workBook.SaveAs(saveDialog.FileName);
    MessageBox.Show("Export successful.", "Export",
        MessageBoxButtons.OK, MessageBoxIcon.Information);
}
using IronXL;
using IronXl.Styles;
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;

DataTable dt = (DataTable)dataGridView1.DataSource;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;

// Header row -- bold, blue background, white text
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    var cell = sheet.GetCellAt(0, col);
    cell.Style.Font.Bold = true;
    cell.Style.SetBackgroundColor("#4472C4");
    cell.Style.Font.Color = "#FFFFFF";
    cell.Style.BottomBorder.Type = BorderType.Thin;
}

// Data rows -- alternating row color
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        string value = dt.Rows[row][col]?.ToString() ?? string.Empty;
        sheet.SetCellValue(row + 1, col, value);

        var cell = sheet.GetCellAt(row + 1, col);
        cell.Style.SetBackgroundColor(row % 2 == 0 ? "#D6DCE5" : "#FFFFFF");
        cell.Style.BottomBorder.Type = BorderType.Thin;
    }
}

// Save via dialog
using var saveDialog = new SaveFileDialog
{
    Filter = "Excel Files|*.xlsx",
    FileName = "GridViewExport.xlsx"
};

if (saveDialog.ShowDialog() == DialogResult.OK)
{
    workBook.SaveAs(saveDialog.FileName);
    MessageBox.Show("Export successful.", "Export",
        MessageBoxButtons.OK, MessageBoxIcon.Information);
}
$vbLabelText   $csharpLabel

WorkBook.Create initialise un nouveau classeur en mémoire au format XLSX. DefaultWorkSheet renvoie la première feuille, que vous pouvez renommer via sa propriété Name avant d'enregistrer. SetCellValue accepte les chaînes de caractères, les entiers, les nombres à virgule flottante et les valeurs DateTime -- IronXL sélectionne automatiquement le type de cellule approprié.

Le motif de couleur de ligne alternée -- row % 2 == 0 sélectionne #D6DCE5, sinon #FFFFFF -- reflète le style de tableau à lignes en bandes intégré à Excel. Vous pouvez utiliser n'importe quel code couleur hexadécimal à six caractères correspondant au système de conception de votre application.

Images de sortie

Exporter un GridView vers Excel avec mise en forme C# à l'aide IronXL: Image 1 - Sortie du GridView

Exporter GridView vers Excel avec mise en forme C# à l'aide IronXL: Image 2 - Sortie Excel

Exporter GridView vers Excel avec mise en forme C# à l'aide IronXL: Image 3 - Message de sortie

Comment exporter un contrôle GridView ASP.NET vers Excel et diffuser le fichier vers le navigateur ?

Les applications web nécessitent un mécanisme de diffusion différent. Au lieu d'écrire sur le système de fichiers, vous sérialisez le classeur en un MemoryStream et l'écrivez dans la réponse HTTP avec les en-têtes appropriés afin que le navigateur le traite comme un téléchargement de fichier.

L'étape préliminaire importante pour les GridViews paginées : désactiver la pagination (AllowPaging = false) et relier la source de données avant l'exportation afin que chaque enregistrement, et pas seulement la page actuelle, soit capturé.

using IronXL;
using IronXl.Styles;
using System;
using System.Data;
using System.IO;
using System.Web.UI;

// Disable paging so all rows are captured
GridView1.AllowPaging = false;
GridView1.DataBind();

DataTable dt = (DataTable)GridView1.DataSource;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;

// Header row
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    var cell = sheet.GetCellAt(0, col);
    cell.Style.Font.Bold = true;
    cell.Style.SetBackgroundColor("#2E75B6");
    cell.Style.Font.Color = "#FFFFFF";
    cell.Style.HorizontalAlignment = HorizontalAlignment.Center;
    cell.Style.BottomBorder.Type = BorderType.Medium;
}

// Data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        var cell = sheet.GetCellAt(row + 1, col);
        cell.Style.SetBackgroundColor(row % 2 == 0 ? "#DEEAF1" : "#FFFFFF");
        cell.Style.BottomBorder.Type = BorderType.Thin;
        cell.Style.LeftBorder.Type = BorderType.Thin;
        cell.Style.RightBorder.Type = BorderType.Thin;
    }
}

// Stream to browser
byte[] fileBytes = workBook.ToByteArray();
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=GridViewExport.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();
using IronXL;
using IronXl.Styles;
using System;
using System.Data;
using System.IO;
using System.Web.UI;

// Disable paging so all rows are captured
GridView1.AllowPaging = false;
GridView1.DataBind();

DataTable dt = (DataTable)GridView1.DataSource;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;

// Header row
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    var cell = sheet.GetCellAt(0, col);
    cell.Style.Font.Bold = true;
    cell.Style.SetBackgroundColor("#2E75B6");
    cell.Style.Font.Color = "#FFFFFF";
    cell.Style.HorizontalAlignment = HorizontalAlignment.Center;
    cell.Style.BottomBorder.Type = BorderType.Medium;
}

// Data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        var cell = sheet.GetCellAt(row + 1, col);
        cell.Style.SetBackgroundColor(row % 2 == 0 ? "#DEEAF1" : "#FFFFFF");
        cell.Style.BottomBorder.Type = BorderType.Thin;
        cell.Style.LeftBorder.Type = BorderType.Thin;
        cell.Style.RightBorder.Type = BorderType.Thin;
    }
}

// Stream to browser
byte[] fileBytes = workBook.ToByteArray();
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=GridViewExport.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();
$vbLabelText   $csharpLabel

Response.AddHeader avec content-disposition: attachment force une boîte de dialogue de téléchargement de fichier dans tous les navigateurs modernes. Le type MIME application/vnd.openxmlformats-officedocument.spreadsheetml.sheet est le type enregistré pour les fichiers XLSX et empêche le navigateur de tenter d'afficher le contenu binaire en ligne.

Pour les applications ASP.NET Core , remplacez Response.BinaryWrite par File(fileBytes, contentType, fileName) dans une action de contrôleur -- la logique de création du classeur est identique.

Comment appliquer une mise en forme conditionnelle en fonction des valeurs des cellules ?

La mise en forme conditionnelle met en évidence les cellules qui répondent à des critères spécifiques, par exemple en marquant en rouge les dates en retard ou en signalant en orange les valeurs inférieures à un seuil. IronXL applique une mise en forme conditionnelle au niveau des cellules lors de la construction du classeur :

// Assume "DueDate" is column index 3 and "Amount" is column index 4
DateTime today = DateTime.Today;

for (int row = 0; row < dt.Rows.Count; row++)
{
    // Highlight past-due dates
    if (dt.Columns.Contains("DueDate") && dt.Rows[row]["DueDate"] != DBNull.Value)
    {
        DateTime dueDate = Convert.ToDateTime(dt.Rows[row]["DueDate"]);
        var dueDateCell = sheet.GetCellAt(row + 1, 3);
        if (dueDate < today)
        {
            dueDateCell.Style.SetBackgroundColor("#FF0000");
            dueDateCell.Style.Font.Color = "#FFFFFF";
            dueDateCell.Style.Font.Bold = true;
        }
    }

    // Highlight amounts below threshold
    if (dt.Columns.Contains("Amount") && dt.Rows[row]["Amount"] != DBNull.Value)
    {
        decimal amount = Convert.ToDecimal(dt.Rows[row]["Amount"]);
        var amountCell = sheet.GetCellAt(row + 1, 4);
        if (amount < 100m)
        {
            amountCell.Style.SetBackgroundColor("#FFC000");
        }
    }
}
// Assume "DueDate" is column index 3 and "Amount" is column index 4
DateTime today = DateTime.Today;

for (int row = 0; row < dt.Rows.Count; row++)
{
    // Highlight past-due dates
    if (dt.Columns.Contains("DueDate") && dt.Rows[row]["DueDate"] != DBNull.Value)
    {
        DateTime dueDate = Convert.ToDateTime(dt.Rows[row]["DueDate"]);
        var dueDateCell = sheet.GetCellAt(row + 1, 3);
        if (dueDate < today)
        {
            dueDateCell.Style.SetBackgroundColor("#FF0000");
            dueDateCell.Style.Font.Color = "#FFFFFF";
            dueDateCell.Style.Font.Bold = true;
        }
    }

    // Highlight amounts below threshold
    if (dt.Columns.Contains("Amount") && dt.Rows[row]["Amount"] != DBNull.Value)
    {
        decimal amount = Convert.ToDecimal(dt.Rows[row]["Amount"]);
        var amountCell = sheet.GetCellAt(row + 1, 4);
        if (amount < 100m)
        {
            amountCell.Style.SetBackgroundColor("#FFC000");
        }
    }
}
$vbLabelText   $csharpLabel

Ce modèle est composable : ajoutez autant de vérifications conditionnelles que vos exigences en matière de rapports l'exigent. Comme IronXL fonctionne cellule par cellule, vous pouvez combiner la mise en forme conditionnelle avec la logique de couleur alternée des lignes en appliquant le style conditionnel après le style de ligne de base.

Comment définir la largeur des colonnes et figer la ligne d'en-tête ?

Un fichier Excel exporté avec un formatage professionnel comprend des largeurs de colonnes appropriées et une ligne d'en-tête fixe afin que les noms de colonnes restent visibles lorsque les utilisateurs font défiler de grands ensembles de données.

IronXL expose la largeur des colonnes via l'accesseur de colonnes WorkSheet et le gel de l'en-tête via la méthode FreezeRows :

// Auto-size columns 0 through the last column index
for (int col = 0; col < dt.Columns.Count; col++)
{
    // Set column width in character units (1 unit ≈ one default character width)
    sheet.SetColumnWidth(col, 20);
}

// Freeze the first row (index 0) so the header stays visible while scrolling
sheet.FreezeRows(1);

// Optionally set row height for the header (in points)
sheet.SetRowHeight(0, 20);
// Auto-size columns 0 through the last column index
for (int col = 0; col < dt.Columns.Count; col++)
{
    // Set column width in character units (1 unit ≈ one default character width)
    sheet.SetColumnWidth(col, 20);
}

// Freeze the first row (index 0) so the header stays visible while scrolling
sheet.FreezeRows(1);

// Optionally set row height for the header (in points)
sheet.SetRowHeight(0, 20);
$vbLabelText   $csharpLabel

Pour une utilisation en production, il est conseillé de calculer la largeur en fonction du nombre maximal de caractères dans chaque colonne plutôt que d'utiliser une valeur fixe. Parcourez les valeurs de la colonne DataTable, mesurez la longueur de la chaîne et multipliez par un facteur de largeur de caractère approprié à la taille de police choisie.

Vous pouvez également appliquer une couleur d'arrière-plan aux cellules Excel en utilisant C# indépendamment de la logique de regroupement des lignes pour une approche de style plus précise.

Comment exporter un DataTable vers Excel sans contrôle GridView ?

De nombreuses applications .NET remplissent des données via des appels de service ou des requêtes de base de données et les stockent dans un DataTable sans jamais les lier à un contrôle d'interface utilisateur. Vous pouvez exporter un DataTable directement vers Excel sans instancier du tout un GridView.

Il s'agit du chemin le plus efficace pour les tâches en arrière-plan, les rapports planifiés et les points de terminaison d'API qui doivent produire des fichiers Excel sur le serveur :

using IronXL;
using IronXl.Styles;
using System.Data;

public static byte[] DataTableToExcelBytes(DataTable dt, string sheetName = "Report")
{
    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet sheet = workBook.CreateWorkSheet(sheetName);

    // Header
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
        var cell = sheet.GetCellAt(0, col);
        cell.Style.Font.Bold = true;
        cell.Style.SetBackgroundColor("#4472C4");
        cell.Style.Font.Color = "#FFFFFF";
    }

    // Data
    for (int row = 0; row < dt.Rows.Count; row++)
    {
        for (int col = 0; col < dt.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        }
    }

    return workBook.ToByteArray();
}
using IronXL;
using IronXl.Styles;
using System.Data;

public static byte[] DataTableToExcelBytes(DataTable dt, string sheetName = "Report")
{
    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet sheet = workBook.CreateWorkSheet(sheetName);

    // Header
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
        var cell = sheet.GetCellAt(0, col);
        cell.Style.Font.Bold = true;
        cell.Style.SetBackgroundColor("#4472C4");
        cell.Style.Font.Color = "#FFFFFF";
    }

    // Data
    for (int row = 0; row < dt.Rows.Count; row++)
    {
        for (int col = 0; col < dt.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        }
    }

    return workBook.ToByteArray();
}
$vbLabelText   $csharpLabel

Cette méthode renvoie un byte[] que vous pouvez écrire sur disque, diffuser à partir d'un point de terminaison API, joindre à un e-mail ou mettre en cache en mémoire. Pour des techniques connexes, consultez le guide sur l'exportation d'un DataTable vers Excel et le tutoriel sur la méthode la plus rapide pour exporter un DataTable vers Excel .

Comment gérez-vous les grands ensembles de données et les performances ?

L'exportation de dizaines de milliers de lignes vers Excel exige une attention particulière à l'allocation de mémoire. La création d'un nouvel objet de type cellule pour chaque cellule d'une grande grille constitue le goulot d'étranglement le plus courant en termes de performances. Réutilisez les définitions de style autant que possible en appliquant les styles aux objets de plage plutôt qu'aux cellules individuelles :

Méthodes d'exportation IronXL selon la taille de l'ensemble de données
Taille de l'ensemble de données Approche recommandée Considération clé
Jusqu'à 5 000 lignes Boucle de style cellule par cellule Code simple, surcharge négligeable
5 000 à 50 000 lignes Application de style de niveau de gamme Réduit significativement les allocations d'objets
Plus de 50 000 lignes Exportation directe de DataTable, style minimal Minimisez les opérations par cellule ; utilisez le streaming si disponible.

Pour les GridViews paginées, définissez toujours AllowPaging = false et reliez avant d'exporter. La pagination limite le nombre de lignes visibles dans le contrôle, de sorte qu'une exportation paginée ne capture que la page actuelle plutôt que l'ensemble des données, ce qui est une source fréquente de bogues d'exportation incomplète.

Vous pouvez également consulter le guide sur l'exportation d'une liste d'objets vers Excel en C# pour des modèles qui fonctionnent avec des collections fortement typées plutôt qu'avec des lignes non typées DataTable.

Comment exporter un GridView dans ASP.NET Core ou Blazor?

Les applications ASP.NET Core et Blazor ne disposent pas d'un contrôle Web Forms, mais le défi sous-jacent en matière d'exportation de données est le même : prendre une collection d'objets ou un objet, créer un classeur stylisé et fournir un fichier. Le code de création du classeur est identique ; Seul le mode de livraison change.

Dans une application Blazor , déclencher le téléchargement d'un fichier via l'interopérabilité JavaScript :

// In a Blazor component or service
using IronXL;
using System.Data;
using Microsoft.JSInterop;

public async Task ExportToExcelAsync(DataTable dt, IJSRuntime js)
{
    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet sheet = workBook.DefaultWorkSheet;

    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
        var cell = sheet.GetCellAt(0, col);
        cell.Style.Font.Bold = true;
        cell.Style.SetBackgroundColor("#4472C4");
        cell.Style.Font.Color = "#FFFFFF";
    }

    for (int row = 0; row < dt.Rows.Count; row++)
    {
        for (int col = 0; col < dt.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        }
    }

    byte[] fileBytes = workBook.ToByteArray();
    string base64 = Convert.ToBase64String(fileBytes);
    await js.InvokeVoidAsync("downloadFileFromBase64", base64, "GridViewExport.xlsx",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
}
// In a Blazor component or service
using IronXL;
using System.Data;
using Microsoft.JSInterop;

public async Task ExportToExcelAsync(DataTable dt, IJSRuntime js)
{
    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet sheet = workBook.DefaultWorkSheet;

    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
        var cell = sheet.GetCellAt(0, col);
        cell.Style.Font.Bold = true;
        cell.Style.SetBackgroundColor("#4472C4");
        cell.Style.Font.Color = "#FFFFFF";
    }

    for (int row = 0; row < dt.Rows.Count; row++)
    {
        for (int col = 0; col < dt.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
        }
    }

    byte[] fileBytes = workBook.ToByteArray();
    string base64 = Convert.ToBase64String(fileBytes);
    await js.InvokeVoidAsync("downloadFileFromBase64", base64, "GridViewExport.xlsx",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
}
$vbLabelText   $csharpLabel

La description complète du modèle de téléchargement Blazor se trouve dans le tutoriel " Exportation Blazor vers Excel " . Pour une approche avec un contrôleur ASP.NET Core , consultez le tutoriel sur l'exportation Excel ASP.NET Core .

Options de style de police et de bordure

IronXL expose des contrôles précis de police et de bordure via l'objet Style sur chaque cellule. La gamme complète des styles de police Excel en C# comprend le gras, l'italique, le souligné, la taille et la couleur. Les types de bordures disponibles via BorderType couvrent les bordures fines, moyennes, épaisses, pointillées, en pointillés, doubles et plusieurs variantes de bordures très fines.

Pour les lignes d'en-tête fusionnées ou les pieds de page de synthèse, IronXL prend également en charge la fusion de cellules dans Excel à l'aide de C# - utile lorsque vous souhaitez une seule cellule de titre s'étendant sur plusieurs colonnes au-dessus de votre tableau de données.

Pour ajuster automatiquement la largeur des colonnes après le remplissage des données, reportez-vous au guide sur l' ajustement automatique des cellules dans Excel à l'aide de C# pour connaître l'approche recommandée.

Pourquoi une bibliothèque Excel native produit-elle des exportations plus propres que HtmlTextWriter ?

La technique d'exportation ASP.NET traditionnelle -- surchargeant VerifyRenderingInServerForm, créant un StringWriter et HtmlTextWriter, et écrivant le contrôle rendu dans la réponse -- produit un document HTML avec une extension .xls. Microsoft Excel ouvre ces fichiers avec un avertissement de compatibilité car le fichier n'est pas au format binaire Excel ou OOXML. Les styles sont limités au CSS en ligne qu'Excel interprète partiellement. La mise en forme conditionnelle est impossible. Les utilisateurs de plateformes autres que Windows ou utilisant LibreOffice constatent une qualité d'affichage dégradée.

IronXL écrit directement au format de feuille de calcul Open XML (OOXML). Le résultat est un fichier .xlsx correct -- identique à celui qu'Excel crée lui-même -- qui s'ouvre sans avertissements dans Excel, LibreOffice, Google Sheets et Numbers sur macOS. La mise en forme est encodée sous forme de styles de feuille de calcul, et non d'attributs HTML, ce qui lui permet de survivre aux allers-retours et à l'affichage multiplateforme.

Comparaison des méthodes d'exportation pour ASP.NET GridView
Méthode Format de fichier Avertissements de format Prise en charge complète du style Bureau requis
HtmlTextWriter + StringWriter HTML se faisant passer pour un XLS Oui Non Non
Interopérabilité de bureau (COM) XLS/XLSX natif Non Oui Oui
IronXL XLSX/XLS natif Non Oui Non

La documentation officielle de Microsoft sur le kit de développement logiciel Open XML explique le format sous-jacent produit par IronXL . La spécification OOXML, maintenue par ECMA International, définit la norme qui garantit la compatibilité entre les applications. La documentation du contrôle GridView ASP.NET sur Microsoft Docs décrit le modèle de contrôle à partir duquel les modèles d'exportation ci-dessus sont lus.

Quelles sont vos prochaines étapes ?

Vous disposez désormais des modèles nécessaires pour exporter les données GridView et DataGridView vers des fichiers XLSX correctement formatés à l'aide d' IronXL , couvrant les modèles de distribution Windows Forms, ASP.NET Web Forms, ASP.NET Core et Blazor .

Pour aller plus loin :

Questions Fréquemment Posées

Comment exporter les données d'un GridView vers Excel en C# ?

Vous pouvez exporter les données de GridView vers Excel en C# grâce à la bibliothèque IronXL . Celle-ci vous permet de créer facilement des fichiers Excel par programmation et d'exporter des données en conservant la mise en forme et les styles.

Pourquoi utiliser IronXL pour exporter des données GridView ?

IronXL simplifie le processus d'exportation des données GridView grâce à son API intuitive, vous permettant de conserver la mise en forme et d'appliquer des styles sans effort, ce qui peut s'avérer difficile avec les méthodes traditionnelles.

IronXL prend-il en charge la mise en forme lors de l'exportation de GridView vers Excel ?

Oui, IronXL prend en charge diverses options de mise en forme, notamment les polices, les couleurs et les styles de cellules, garantissant ainsi que vos fichiers Excel exportés aient une apparence professionnelle et conservent la conception prévue.

Puis-je personnaliser l'apparence des fichiers Excel générés à partir des données de GridView ?

IronXL offre une gamme d'options de personnalisation pour les fichiers Excel, vous permettant d'ajuster les styles de cellules, les polices, les couleurs et plus encore pour répondre à vos besoins spécifiques lors de l'exportation depuis GridView.

Est-il possible d'exporter de grands ensembles de données GridView vers Excel en utilisant IronXL?

IronXL est capable de gérer efficacement de grands ensembles de données, vous permettant ainsi d'exporter des données GridView volumineuses vers Excel sans problème de performance.

Quels sont les avantages de l'exportation des données GridView vers Excel à l'aide IronXL par rapport à d'autres méthodes ?

IronXL offre une approche plus simple et plus flexible pour l'exportation des données GridView, offrant une prise en charge robuste de la mise en forme, de la personnalisation et de la gestion des grands ensembles de données, ce qui la rend supérieure à de nombreuses autres méthodes.

Comment puis-je préserver l'intégrité des données lors de l'exportation d'un GridView vers Excel ?

IronXL garantit l'intégrité des données en convertissant et en préservant avec précision les types et les formats de données lors du processus d'exportation de GridView vers Excel.

IronXL peut-il exporter des données à partir de contrôles GridView présentant des structures complexes ?

Oui, IronXL peut gérer et exporter efficacement les données des contrôles GridView présentant des structures complexes, en conservant la hiérarchie et la mise en forme dans le fichier Excel résultant.

Dans quels formats de fichiers IronXL peut-il exporter les données GridView ?

IronXL exporte principalement les données vers des formats Excel tels que XLSX, mais il prend également en charge d'autres formats comme CSV, offrant ainsi une grande flexibilité en fonction de vos besoins.

Est-il possible d'exporter un GridView avec une mise en forme conditionnelle à l'aide IronXL?

IronXL prend en charge la mise en forme conditionnelle, ce qui vous permet de définir des règles et des styles qui s'ajustent dynamiquement en fonction des valeurs des cellules lors de l'exportation des données GridView vers Excel.

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