Passer au contenu du pied de page
COMPARER à D'AUTRES COMPOSANTS
Une comparaison entre NPOI et IronXL

Une comparaison entre IronXL et NPOI

Comme vous le savez peut-être, Excel est probablement l'application tableur la plus utilisée au monde. Les utilisateurs incluent à la fois les développeurs et le grand public, mais ce sont probablement les développeurs qui seront le plus intéressés par cet article. Au départ, les développeurs disposaient de peu d'options pour travailler avec Excel dans leurs différentes applications. Cependant, la suite Office intégrait VBA (Visual Basic pour Applications) qui permettait de manipuler n'importe quel produit Office selon ses besoins.

Les développeurs utilisaient VBA dans Excel pour personnaliser leurs interactions avec Excel et ses données, voire ses capacités visuelles. Mais, finalement, cela n'a pas suffi. Les développeurs en voulaient plus, et ils ont donc commencé à utiliser Office.Interop.

Dans cet article, je comparerai deux excellentes bibliothèques Excel qui ne dépendent pas d'Office.Interop pour fonctionner avec Excel. Ils sont:

  • IronXL
  • NPOI

Vous découvrirez les fonctionnalités de chaque bibliothèque Excel, puis vous comparerez les deux à travers des exemples de code et des tutoriels étape par étape. Bien que cet article ne puisse pas couvrir toutes les fonctionnalités des deux bibliothèques Excel, il expliquera les utilisations les plus courantes et les plus populaires de chacune.

Qu'est-ce que NPOI ?

NPOI is the .NET version of the POI Java project at http://poi.apache.org/. POI est un projet open-source qui peut vous aider à lire/écrire des fichiers xls, doc et ppt. Il possède un large éventail d'applications.

Par exemple, vous pouvez l'utiliser pour :

Générez un rapport Excel sans installer la suite Microsoft Office sur votre serveur ; cette méthode est plus efficace que l'exécution d'un contrôle ActiveX Microsoft Excel en arrière-plan.

  • Extraire du texte à partir de documents Office pour vous aider à implémenter une fonction d'indexation plein texte (cette fonction est généralement utilisée pour créer des moteurs de recherche).
  • Extraire des images à partir de documents Office
  • Générer des feuilles Excel contenant des formules

NPOI et Excel

NPOI is a C# port of the POI Java project by Apache. Il est gratuit et open source. De plus, elle ne nécessite pas d'interopérabilité, ce qui signifie que les utilisateurs n'auront pas besoin d'avoir Excel installé pour que l'application du développeur fonctionne avec celui-ci.

IronXL et Excel

IronXL est une API Excel pour VB et C#. Avec IronXL, vous pouvez lire, modifier et créer des fichiers de tableur Excel en .NET.

Fonctionnalités communes de la bibliothèque pour les bibliothèques Excel NPOI et IronXL

NPOI IronXL
Plages de cellules Plages de cellules
Mise en forme des cellules (bordure, couleur, remplissage, police, nombre, alignement) Styles visuels des cellules : police, taille, motif d'arrière-plan, bordure, alignement et formats numériques.
Calcul de formule Formules
Validation des Données Validation des Données
mise en forme conditionnelle mise en forme conditionnelle
Images Images
Graphiques Graphiques

Tableau 1 - Comparaison des fonctionnalités


Installation d'IronXL et de NPOI

Vous pouvez installer les deux bibliothèques en les téléchargeant manuellement, via NuGet ou avec le gestionnaire de packages NuGet dans Visual Studio. Voici un bref aperçu.

Installation NPOI

Installation de NPOI avec NuGet

Pour installer NPOI via NuGet, ouvrez l'invite de commandes développeur de Visual Studio et saisissez la commande suivante :

Install-Package NPOI -Version x.x.x
Graphical user interfaceDescription automatically generated

Figure 1 - Installation de NuGet NPOI

Gestionnaire de packages NuGet et NPOI pour Visual Studio

Utilisez les étapes suivantes pour installer IronXL ou NPOI via le gestionnaire de packages NuGet dans Visual Studio :

  • Cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions
  • Sélectionnez Gérer les packages NuGet
  • Recherchez votre forfait Cliquez sur Installer
A screenshot of a computerDescription automatically generated

Figure 2 - Gestionnaire de packages NuGet pour NPOI

Installation d'IronXL

Téléchargement d'IronXL

To download IronXL, navigate to the following URL and click the "Download" button.

Download IronXL

Figure 3 - Télécharger IronXL

Installation d'IronXL avec NuGet

Pour installer IronXL via NuGet, ouvrez l'invite de commandes développeur de Visual Studio et saisissez la commande suivante :

Install-Package IronXL.Excel -Version x.x.x
NuGet IronXL Installation

Figure 4 - Installation de NuGet IronXL

Gestionnaire de packages NuGet pour Visual Studio et IronXL

Suivez les étapes ci-dessous pour installer IronXL via le gestionnaire de packages NuGet dans Visual Studio :

  • Cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions
  • Sélectionnez Gérer les packages NuGet
  • Recherchez votre forfait Cliquez sur Installer
A screenshot of a computerDescription automatically generated

Figure 5 - Gestionnaire de packages NuGet pour IronXL

Lecture et écriture dans un fichier Excel avec NPOI et IronXL

Lecture d'un fichier Excel avec NPOI

Le code suivant montre comment lire un fichier Excel et afficher son contenu avec NPOI. Ajoutez le code suivant et incluez les espaces de noms nécessaires :

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.Data;
using System.IO;
using System.Collections.Generic;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.Data;
using System.IO;
using System.Collections.Generic;
Imports NPOI.SS.UserModel
Imports NPOI.XSSF.UserModel
Imports System.Data
Imports System.IO
Imports System.Collections.Generic
$vbLabelText   $csharpLabel

Le code ci-dessous lit un fichier Excel existant et l'affiche dans une grille de données.

public void ReadExcelNPOI()
{
    DataTable dtTable = new DataTable();
    List<string> lstRows = new List<string>();
    ISheet objWorksheet;
    string strPath = @"c:\temp\NPOI_Test.XLSX";

    // Use FileStream to open the Excel file
    using (var fStream = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
        fStream.Position = 0;
        XSSFWorkbook objWorkbook = new XSSFWorkbook(fStream);
        objWorksheet = objWorkbook.GetSheetAt(0);
        IRow objHeader = objWorksheet.GetRow(0);
        int countCells = objHeader.LastCellNum;

        // Add columns to the DataTable based on the header row of Excel
        for (int j = 0; j < countCells; j++)
        {
            ICell objCell = objHeader.GetCell(j);
            if (objCell == null || string.IsNullOrWhiteSpace(objCell.ToString())) continue;
            {
                dtTable.Columns.Add(objCell.ToString());
            }
        }

        // Add rows to the DataTable, looping through each row and cell
        for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
        {
            IRow objRow = objWorksheet.GetRow(i);
            if (objRow == null || objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;

            for (int j = objRow.FirstCellNum; j < countCells; j++)
            {
                ICell cell = objRow.GetCell(j);
                if (cell != null && !string.IsNullOrEmpty(cell.ToString()) && !string.IsNullOrWhiteSpace(cell.ToString()))
                {
                    lstRows.Add(cell.ToString());
                }
            }

            if (lstRows.Count > 0)
                dtTable.Rows.Add(lstRows.ToArray());

            lstRows.Clear();
        }
    }

    // Assuming dataGridView1 is a DataGridView control on a Form
    dataGridView1.DataSource = dtTable;
}

private void button1_Click(object sender, EventArgs e)
{
    ReadExcelNPOI();
}
public void ReadExcelNPOI()
{
    DataTable dtTable = new DataTable();
    List<string> lstRows = new List<string>();
    ISheet objWorksheet;
    string strPath = @"c:\temp\NPOI_Test.XLSX";

    // Use FileStream to open the Excel file
    using (var fStream = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
        fStream.Position = 0;
        XSSFWorkbook objWorkbook = new XSSFWorkbook(fStream);
        objWorksheet = objWorkbook.GetSheetAt(0);
        IRow objHeader = objWorksheet.GetRow(0);
        int countCells = objHeader.LastCellNum;

        // Add columns to the DataTable based on the header row of Excel
        for (int j = 0; j < countCells; j++)
        {
            ICell objCell = objHeader.GetCell(j);
            if (objCell == null || string.IsNullOrWhiteSpace(objCell.ToString())) continue;
            {
                dtTable.Columns.Add(objCell.ToString());
            }
        }

        // Add rows to the DataTable, looping through each row and cell
        for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
        {
            IRow objRow = objWorksheet.GetRow(i);
            if (objRow == null || objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;

            for (int j = objRow.FirstCellNum; j < countCells; j++)
            {
                ICell cell = objRow.GetCell(j);
                if (cell != null && !string.IsNullOrEmpty(cell.ToString()) && !string.IsNullOrWhiteSpace(cell.ToString()))
                {
                    lstRows.Add(cell.ToString());
                }
            }

            if (lstRows.Count > 0)
                dtTable.Rows.Add(lstRows.ToArray());

            lstRows.Clear();
        }
    }

    // Assuming dataGridView1 is a DataGridView control on a Form
    dataGridView1.DataSource = dtTable;
}

private void button1_Click(object sender, EventArgs e)
{
    ReadExcelNPOI();
}
Public Sub ReadExcelNPOI()
	Dim dtTable As New DataTable()
	Dim lstRows As New List(Of String)()
	Dim objWorksheet As ISheet
	Dim strPath As String = "c:\temp\NPOI_Test.XLSX"

	' Use FileStream to open the Excel file
	Using fStream = New FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
		fStream.Position = 0
		Dim objWorkbook As New XSSFWorkbook(fStream)
		objWorksheet = objWorkbook.GetSheetAt(0)
		Dim objHeader As IRow = objWorksheet.GetRow(0)
		Dim countCells As Integer = objHeader.LastCellNum

		' Add columns to the DataTable based on the header row of Excel
		For j As Integer = 0 To countCells - 1
			Dim objCell As ICell = objHeader.GetCell(j)
			If objCell Is Nothing OrElse String.IsNullOrWhiteSpace(DirectCast(objCell, Object).ToString()) Then
				Continue For
			End If
			If True Then
				dtTable.Columns.Add(DirectCast(objCell, Object).ToString())
			End If
		Next j

		' Add rows to the DataTable, looping through each row and cell
		For i As Integer = (objWorksheet.FirstRowNum + 1) To objWorksheet.LastRowNum
			Dim objRow As IRow = objWorksheet.GetRow(i)
			If objRow Is Nothing OrElse objRow.Cells.All(Function(d) d.CellType = CellType.Blank) Then
				Continue For
			End If

			For j As Integer = objRow.FirstCellNum To countCells - 1
				Dim cell As ICell = objRow.GetCell(j)
				If cell IsNot Nothing AndAlso Not String.IsNullOrEmpty(DirectCast(cell, Object).ToString()) AndAlso Not String.IsNullOrWhiteSpace(DirectCast(cell, Object).ToString()) Then
					lstRows.Add(DirectCast(cell, Object).ToString())
				End If
			Next j

			If lstRows.Count > 0 Then
				dtTable.Rows.Add(lstRows.ToArray())
			End If

			lstRows.Clear()
		Next i
	End Using

	' Assuming dataGridView1 is a DataGridView control on a Form
	dataGridView1.DataSource = dtTable
End Sub

Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
	ReadExcelNPOI()
End Sub
$vbLabelText   $csharpLabel

Lecture d'un fichier Excel avec IronXL

Le code suivant montre comment lire un fichier Excel et l'afficher dans une grille de données avec IronXL. Ajoutez le code suivant et incluez l'espace de noms :

using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
$vbLabelText   $csharpLabel

Notez la présence d'IronXL. Ceci est nécessaire au fonctionnement d'IronXL. Ajoutez les lignes suivantes :

private void button2_Click(object sender, EventArgs e)
{
    // Load the Excel workbook
    string strPath = @"c:\temp\NPOI_Test.XLSX";
    WorkBook workbook = WorkBook.Load(strPath);

    // Access the default worksheet
    WorkSheet sheet = workbook.DefaultWorkSheet;

    // Convert the worksheet to a DataTable
    var dtTable = sheet.ToDataTable(true);

    // Assuming dataGridView1 is a DataGridView control on a Form
    dataGridView1.DataSource = dtTable;
}
private void button2_Click(object sender, EventArgs e)
{
    // Load the Excel workbook
    string strPath = @"c:\temp\NPOI_Test.XLSX";
    WorkBook workbook = WorkBook.Load(strPath);

    // Access the default worksheet
    WorkSheet sheet = workbook.DefaultWorkSheet;

    // Convert the worksheet to a DataTable
    var dtTable = sheet.ToDataTable(true);

    // Assuming dataGridView1 is a DataGridView control on a Form
    dataGridView1.DataSource = dtTable;
}
Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs)
	' Load the Excel workbook
	Dim strPath As String = "c:\temp\NPOI_Test.XLSX"
	Dim workbook As WorkBook = WorkBook.Load(strPath)

	' Access the default worksheet
	Dim sheet As WorkSheet = workbook.DefaultWorkSheet

	' Convert the worksheet to a DataTable
	Dim dtTable = sheet.ToDataTable(True)

	' Assuming dataGridView1 is a DataGridView control on a Form
	dataGridView1.DataSource = dtTable
End Sub
$vbLabelText   $csharpLabel

Comme vous pouvez le constater, tout cela représente beaucoup moins de travail.

Conclusion

Alors pourquoi IronXL ? Comme vous pouvez le constater, IronXL possède une API facile à utiliser, qui permet de garder votre code propre. Les bibliothèques utilisant IronXL se targuent d'un code propre et lisible, un investissement rentable car il réduit le temps et les efforts nécessaires pour comprendre le fonctionnement du code, permettant ainsi de le modifier sans risque de dysfonctionnement.

IronXL est globalement plus intuitif tout en étant aussi puissant que NPOI. Et bien sûr, avec une clé de licence, vous bénéficiez de l'avantage le plus important des logiciels payants : notre assistance professionnelle, des mises à jour régulières et fiables, et la possibilité de demander des fonctionnalités aux agents du support d'Iron Software, qui se feront un plaisir de vous aider. C'est quelque chose que l'open source ne peut tout simplement pas fournir.

Téléchargements

Ce projet est disponible sur GitHub :

Exemple IronXL vs NPOI

Veuillez noterNPOI est une marque déposée de son propriétaire respectif. Ce site n'est ni affilié à, ni approuvé par, ni parrainé par NPOI. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont faites à titre d'information uniquement et reflètent les informations publiquement disponibles au moment de la rédaction.

Questions Fréquemment Posées

Quelle est une alternative à l'utilisation d'Office.Interop pour la manipulation d'Excel en C# ?

IronXL est une alternative à l'utilisation d'Office.Interop pour la manipulation d'Excel en C#. Il offre une API conviviale qui permet aux développeurs de créer, lire et modifier des fichiers Excel sans avoir besoin d'installer Microsoft Office.

Comment puis-je convertir des fichiers Excel en PDF en C# ?

Vous pouvez utiliser IronXL pour convertir des fichiers Excel en PDF en C# en chargeant le carnet Excel avec WorkBook.Load puis en utilisant la méthode WorkBook.SaveAs pour enregistrer le fichier au format PDF.

Quels sont les principaux avantages d'utiliser IronXL pour la manipulation de fichiers Excel ?

IronXL offre une API plus intuitive pour un entretien plus facile du code, un support professionnel, des mises à jour régulières et la capacité de gérer des fichiers Excel sans Microsoft Office installé, ce qui en fait un choix solide pour les développeurs.

IronXL peut-il être installé via NuGet ?

Oui, IronXL peut être installé via NuGet. Ouvrez l'invite de commande du développeur Visual Studio et saisissez Install-Package IronXL.Excel -Version x.x.x.

Quelles sont les tâches courantes liées à Excel qui peuvent être effectuées avec IronXL ?

Avec IronXL, les développeurs peuvent effectuer des tâches telles que la lecture et l'écriture de fichiers Excel, le stylisme des cellules, l'utilisation de formules, la validation des données, l'application de formatages conditionnels, et le travail avec des images et des graphiques.

Comment lire un fichier Excel en C# sans Microsoft Office ?

Avec IronXL, vous pouvez lire un fichier Excel en C# en chargeant le carnet à l'aide de WorkBook.Load, en accédant à la feuille de calcul et en parcourant les lignes et les cellules en utilisant des méthodes simples.

Pourquoi choisir IronXL par rapport aux alternatives open-source pour la manipulation d'Excel ?

IronXL offre une API plus conviviale, un support professionnel, des mises à jour régulières et des demandes de fonctionnalités continues, ce qui constitue des avantages par rapport aux alternatives open-source comme NPOI.

En quoi NPOI diffère-t-il d'IronXL pour la manipulation de fichiers Excel ?

NPOI est une bibliothèque open-source basée sur le projet Apache POI pour gérer les fichiers Excel sans Microsoft Office. IronXL, cependant, offre une API plus intuitive, un support professionnel, et des mises à jour régulières, le rendant adapté aux applications commerciales.

Quel est le processus pour convertir une feuille de calcul Excel en DataTable en utilisant IronXL ?

Pour convertir une feuille de calcul Excel en DataTable en utilisant IronXL, chargez le classeur avec WorkBook.Load, accédez à la feuille de calcul désirée et utilisez la méthode disponible pour la convertir en DataTable pour une utilisation ultérieure.

Comment IronXL peut-il améliorer la gestion des fichiers Excel dans les applications .NET ?

IronXL améliore la gestion des fichiers Excel dans les applications .NET en offrant une API propre et intuitive, facilitant des tâches comme la lecture, la modification, et la création de fichiers Excel facilement, sans dépendre des installations de Microsoft Office.

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