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

Une comparaison entre IronXL et NPOI

As you may know, Excel is probably the most used spreadsheet application in the world. Users include both developers and the general population, but it is developers who will probably be more engaged by this article. Initially, there weren’t many options for developers to work with Excel across their various applications. However, there were VBA (Visual Basic for Applications) built into the Office Suite with which you could manipulate any Office product according to your needs.

Developers used VBA in Excel to customize their interactions with Excel and its data, even its visual capabilities. But, eventually this wasn’t enough. Developers wanted more, and so they began using Office.Interop.

In this article, I will compare two very good Excel libraries that do not depend on Office.Interop to work with Excel. They are:

  • IronXL
  • NPOI

You will see and learn what each Excel library can do, and then compare the two through code examples and step-by-step tutorials. Although this article cannot cover all features of both Excel libraries, it will explain the most common and most popular uses of each.

What is NPOI?

NPOI is the .NET version of the POI Java project at http://poi.apache.org/. POI is an open-source project that can help you read/write xls, doc, ppt files. It has a wide range of applications.

For example, you can use it to:

  • Generate an Excel report without Microsoft Office suite installed on your server and more efficient than calling Microsoft Excel ActiveX in the background
  • Extract text from Office documents to help you implement a full-text indexing feature (most of the time this feature is used to create search engines)
  • Extract images from Office documents
  • Generate Excel sheets that contain formulas

NPOI and Excel

NPOI is a C# port of the POI Java project by Apache. It is free and open-source. Also, it doesn't need Interop, meaning that users will not need to have Excel installed to have the developer's app work with it.

IronXL and Excel

IronXL is an Excel API for VB and C#. With IronXL you can read, edit, and create Excel spreadsheet files in .NET.

Common Library Features for the NPOI and IronXL Excel Libraries

NPOI IronXL
Cell Ranges Cell Ranges
Cell styling (Border, Color, Fill, Font, Number, Alignments) Cell visual styles Font, Size, Background pattern, Border, Alignment, and Number formats.
Formula calculation Formulas
Data Validation Data Validation
Conditional formatting Conditional formatting
Images Images
Charts Charts

Table 1 - Feature Comparison


Installation of IronXL and NPOI

You can install both libraries by downloading them manually, via NuGet, or with the NuGet Package Manager in Visual Studio. Here is a quick overview.

NPOI Installation

Installing NPOI with NuGet

To install NPOI through NuGet, open the Visual Studio developer command prompt and enter the following:

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

Figure 1 - NuGet NPOI Installation

Visual Studio NuGet Package Manager and NPOI

Use the following steps to install IronXL or NPOI via the NuGet Package Manager in Visual Studio:

  • Right-click the project in the Solution Explorer
  • Select Manage NuGet Packages
  • Browse for your Package
  • Click Install
A screenshot of a computerDescription automatically generated

Figure 2 - NuGet Package Manager for NPOI

IronXL Installation

Downloading IronXL

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

Download IronXL

Figure 3 - Download IronXL

Installing IronXL with NuGet

To install IronXL through NuGet, open the Visual Studio developer command prompt and enter the following:

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

Figure 4 - NuGet IronXL Installation

Visual Studio NuGet Package Manager and IronXL

Use the following steps to install IronXL via the NuGet Package Manager in Visual Studio:

  • Right-click the project in the Solution Explorer
  • Select Manage NuGet Packages
  • Browse for your Package
  • Click Install
A screenshot of a computerDescription automatically generated

Figure 5 - NuGet Package Manager for IronXL

Reading from and writing to an Excel file with NPOI and IronXL

Reading an Excel file with NPOI

The following code demonstrates how to read an Excel file and display its contents with NPOI. Add the following code and include the necessary namespaces:

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

The below code reads an existing Excel file and displays it inside a data grid view.

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

Reading an Excel file with IronXL

The following code demonstrates how to read an Excel file and display it inside a data grid view with IronXL. Add the following code and include the namespace:

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

Notice the inclusion of IronXL. This is necessary for IronXL to work. Add the next few lines:

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

As you can see, this all adds up to a lot less work.

Conclusion

So why IronXL? As you see, IronXL has an easy to use API, that keeps your code clean. Libraries that use IronXL boast clean, readable code which is an investment that pays off by reducing time and effort needed to understand what the code does, allowing it to be changed without breaking things.

IronXL is more intuitive all-around while being as powerful as NPOI. And, of course, with a license key you get access to the most important advantage of paid software: you get our professional support, consistent and reliable update schedules, and ability to request features from Iron Software support agents who are happy to assist you. This is something open source just can’t provide.

Downloads

This project is available on GitHub:

IronXL vs NPOI Example

Veuillez noterNPOI is a registered trademark of its respective owner. This site is not affiliated with, endorsed by, or sponsored by NPOI. All product names, logos, and brands are property of their respective owners. Comparisons are for informational purposes only and reflect publicly available information at the time of writing.

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