Test dans un environnement réel
Test en production sans filigrane.
Fonctionne partout où vous en avez besoin.
Les outils MS Office tels que Word, Excel, PowerPoint, etc. sont très populaires et largement utilisés dans tous les types d'entreprises. La création de fichiers de rapport au format Excel est une fonctionnalité dont de nombreux utilisateurs ont besoin dans leurs applications logicielles, et il existe désormais une manière définitive d'inclure cette fonctionnalité dans les applications logicielles à l'aide des différentes bibliothèques disponibles.
Dans cet article, nous allons discuter et comparer comment travailler avec des fichiers Microsoft Excel de manière programmatique en C# en utilisant les deux bibliothèques les plus populaires, IronXL et Microsoft Office Excel Interop.
IronXL et Microsoft Excel Interop fournissent tous deux des méthodes pour créer, modifier et lire des documents Excel dans les frameworks .NET. Il s'agit maintenant de déterminer quels sont les Bibliothèque C# pour Excel est le mieux adapté à votre projet. Cet article vous aidera à choisir la meilleure option pour vos applications.
Examinons d'abord ce que les deux bibliothèques ont à offrir, puis passons à la comparaison proprement dite.
IronXL est une bibliothèque .NET qui facilite la lecture et l'édition de documents Microsoft Excel en C#. IronXL for .NET est une bibliothèque logicielle autonome .NET pour la lecture d'une large gamme de formats de feuilles de calcul. Il ne nécessite pas l'installation de Microsoft Excel et ne dépend pas non plus d'Interop.
IronXL est une API C# intuitive qui vous permet de lire, d'éditer et de créer des fichiers de feuilles de calcul Excel dans .NET avec des performances rapides comme l'éclair. IronXL prend pleinement en charge .NET Core, .NET Framework, Xamarin, Mobile, Linux, macOS et Azure.
IronXL est une bibliothèque de feuilles de calcul Excel pour C#, basée sur le .NET Core et le .NET Framework.
Docs & Support
L'espace de noms Microsoft.Office.Interop.Excel fournit des méthodes pour interagir avec l'application Microsoft Excel en C# et Visual Basic. Cet espace de noms permet de créer de nouveaux classeurs Excel, des feuilles de travail Excel, d'afficher des données dans des feuilles existantes, de modifier le contenu de feuilles Excel existantes et bien d'autres choses encore.
Les classes et interfaces de Microsoft.Office.Interop.Excel fournissent un support pour l'interopérabilité entre le modèle d'objet COM des fichiers Microsoft Excel et les applications gérées qui automatisent les fichiers xls ou xlsx.
Le langage de programmation C# comprend des fonctionnalités qui facilitent le travail avec les objets de l'API Microsoft Office Interop. Les nouvelles fonctionnalités comprennent les arguments nommés et facultatifs, un nouveau type appelé dynamique et la possibilité de passer des arguments aux paramètres de référence dans les méthodes COM comme s'il s'agissait de paramètres de valeur. Il s'agit donc d'un meilleur choix pour travailler avec des objets COM et Interop.
Remarque : les objets interop de Microsoft Excel nécessitent l'installation de Microsoft Excel sur l'ordinateur
Le reste de l'article se lit comme suit :
Créer une application console
Installation de la bibliothèque C# d'IronXL
Microsoft Office Interop Excel Installation
Créer un nouveau classeur et une nouvelle feuille Excel
Lire des fichiers Excel
Travailler avec des plages de valeurs dans les fichiers Excel
Travailler avec des formules Excel
Licences
Suivez les étapes suivantes pour créer une application console :
Dans l'écran Informations complémentaires, indiquez la version du framework que vous souhaitez utiliser. Nous utiliserons .NET Framework 4.8 dans cet exemple.
Cliquez sur Créer pour terminer le processus.
Le projet est maintenant créé et nous sommes presque prêts à tester les bibliothèques. Cependant, nous devons encore les installer et les intégrer dans notre projet. Commençons par installer IronXL.
Vous pouvez télécharger et installer la bibliothèque IronXL en utilisant les méthodes suivantes :
Utilisation de Visual Studio avec les paquets NuGet.
Téléchargez directement le paquet NuGet.
Installation manuelle avec la DLL.
Examinons chacun d'entre eux de plus près.
Visual Studio propose le gestionnaire de paquets NuGet pour installer les paquets NuGet dans vos projets. Vous pouvez y accéder par le menu Projet ou en cliquant avec le bouton droit de la souris sur votre projet dans l'explorateur de solutions.
Maintenant, à partir de l'onglet Parcourir -> rechercher IronXL.Excel -> Installer
Une autre façon de télécharger et d'installer la bibliothèque Microsoft.Office.Interop.Excel C# est d'utiliser les étapes suivantes pour installer le paquet NuGet via l'Invite de commande du développeur.
Ouvrez l'invite de commande Developer - qui se trouve généralement dans le dossier Visual Studio.
Tapez la commande suivante :
mP> Install-Package Microsoft.Office.Interop.Excel`
Dans l'explorateur de solutions, cliquez avec le bouton droit de la souris sur le fichier Program.cs, puis cliquez sur Afficher le code.
using Excel = Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
Imports Excel = Microsoft.Office.Interop.Excel
Un classeur est un fichier Excel contenant plusieurs feuilles de calcul avec des lignes et des colonnes. Les deux bibliothèques permettent de créer un nouveau classeur Excel et des feuilles de calcul. Examinons le code étape par étape.
Il n'y a rien de plus simple que de créer un nouveau classeur Excel à l'aide d'IronXL! Une seule ligne de code! Oui, vraiment. Ajoutez le code suivant à votre fonction statique void main dans le fichier Program.cs :
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Les deux XLS(ancienne version du fichier Excel) et XLSX(version actuelle et plus récente du fichier) peuvent être créés avec IronXL.
Et il est encore plus facile de créer une feuille de travail par défaut :
var worksheet = workbook.CreateWorkSheet("IronXL Features");
var worksheet = workbook.CreateWorkSheet("IronXL Features");
Dim worksheet = workbook.CreateWorkSheet("IronXL Features")
Vous pouvez désormais utiliser la variable de feuille de calcul pour définir les valeurs des cellules et faire presque tout ce qu'un fichier Excel peut faire.
Pour créer un fichier Excel à l'aide de Microsoft.Office.Interop, Microsoft Excel doit être installé. Nous devons donc vérifier si Microsoft Excel est installé sur la machine hôte - si ce n'est pas le cas, il renverra simplement une exception qui devra être gérée. Les exemples de code suivants vous permettent de vérifier l'installation d'une application Excel et de créer des classeurs et des feuilles Excel :
Vérifier que Microsoft Excel est installé :
//Start Excel and get Application object.
Excel.Application xlApp = new Excel.Application();
//Checks if Excel is installed
if (xlApp == null)
{
Console.WriteLine("Excel is not installed in the system...");
return;
}
//Start Excel and get Application object.
Excel.Application xlApp = new Excel.Application();
//Checks if Excel is installed
if (xlApp == null)
{
Console.WriteLine("Excel is not installed in the system...");
return;
}
'Start Excel and get Application object.
Dim xlApp As New Excel.Application()
'Checks if Excel is installed
If xlApp Is Nothing Then
Console.WriteLine("Excel is not installed in the system...")
Return
End If
Créer un cahier et une feuille de travail :
//Create Workbook and Worksheet
object misValue = System.Reflection.Missing.Value;
Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(misValue);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Create Workbook and Worksheet
object misValue = System.Reflection.Missing.Value;
Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(misValue);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
'Create Workbook and Worksheet
Dim misValue As Object = System.Reflection.Missing.Value
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Add(misValue)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
Jusqu'à présent, en examinant les deux codes, l'avantage se trouve du côté d'IronXL par rapport à Office Interop Excel. IronXL n'utilise qu'une seule ligne de code pour pouvoir travailler avec des fichiers Excel, sans complications ni dépendances supplémentaires.
Les deux bibliothèques peuvent ouvrir et lire des documents Excel existants. Jetons un coup d'œil à l'exemple de code.
La classe IronXL WorkBook représente une feuille Excel. Pour ouvrir un fichier Excel à l'aide de C#, nous utilisons WorkBook.Load et spécifions le chemin d'accès du fichier Excel(.xlsx). Le code suivant, d'une seule ligne, est utilisé pour ouvrir le fichier en lecture :
//Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
//Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
'Load WorkBook
Dim workbook = WorkBook.Load("Spreadsheets\\sample.xlsx")
Chaque WorkBook peut avoir plusieurs objets WorkSheet. Il s'agit des feuilles de calcul du document Excel. Si le classeur contient des feuilles de calcul, récupérez-les par leur nom comme suit :
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
'Open Sheet for reading
Dim worksheet = workbook.GetWorkSheet("sheetnamegoeshere")
Code pour la lecture des valeurs des cellules :
// Read from Ranges of cells elegantly.
foreach (var cell in worksheet ["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
// Read from Ranges of cells elegantly.
foreach (var cell in worksheet ["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
' Read from Ranges of cells elegantly.
For Each cell In worksheet ("A2:A10")
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next cell
Cette méthode utilise également une ligne de code pour ouvrir un classeur et une feuille. Le code est le suivant :
Excel.Application xlApp = new Excel.Application();
//Load WorkBook
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
//Open Sheet for reading
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Excel.Application xlApp = new Excel.Application();
//Load WorkBook
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
//Open Sheet for reading
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Dim xlApp As New Excel.Application()
'Load WorkBook
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Open(filePath)
'Open Sheet for reading
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
Code pour la lecture des valeurs des cellules :
//Get the entire range of cells
Excel.Range xlRange = xlWorkSheet.UsedRange;
//Reading first 10 rows of with two columns
for (int rowCount = 1; rowCount <= 10; rowCount++)
{
firstValue = Convert.ToString((xlRange.Cells [rowCount, 1] as Excel.Range).Text);
secondValue = Convert.ToString((xlRange.Cells [rowCount, 2] as Excel.Range).Text);
Console.WriteLine(firstValue + "\t" + secondValue);
}
//Get the entire range of cells
Excel.Range xlRange = xlWorkSheet.UsedRange;
//Reading first 10 rows of with two columns
for (int rowCount = 1; rowCount <= 10; rowCount++)
{
firstValue = Convert.ToString((xlRange.Cells [rowCount, 1] as Excel.Range).Text);
secondValue = Convert.ToString((xlRange.Cells [rowCount, 2] as Excel.Range).Text);
Console.WriteLine(firstValue + "\t" + secondValue);
}
Imports Microsoft.VisualBasic
'Get the entire range of cells
Dim xlRange As Excel.Range = xlWorkSheet.UsedRange
'Reading first 10 rows of with two columns
For rowCount As Integer = 1 To 10
firstValue = Convert.ToString((TryCast(xlRange.Cells (rowCount, 1), Excel.Range)).Text)
secondValue = Convert.ToString((TryCast(xlRange.Cells (rowCount, 2), Excel.Range)).Text)
Console.WriteLine(firstValue & vbTab & secondValue)
Next rowCount
Cependant, la vérification de l'installation d'Excel et la création de son instance en font partie intégrante.
Dans IronXL, une seule ligne de code permet d'obtenir la plage de valeurs de certaines cellules. Ensuite, à l'aide d'une boucle, chaque valeur de cellule peut être lue ou modifiée. Le code est le suivant :
WorkBook workbook = WorkBook.Load("test.xls");
WorkSheet sheet = workbook.WorkSheets.First();
//This is how we get range from Excel worksheet
var range = sheet ["A2:A8"];
//This is how we can iterate over our range and read or edit any cell
foreach (var cell in range)
{
Console.WriteLine(cell.Value);
}
WorkBook workbook = WorkBook.Load("test.xls");
WorkSheet sheet = workbook.WorkSheets.First();
//This is how we get range from Excel worksheet
var range = sheet ["A2:A8"];
//This is how we can iterate over our range and read or edit any cell
foreach (var cell in range)
{
Console.WriteLine(cell.Value);
}
Dim workbook As WorkBook = WorkBook.Load("test.xls")
Dim sheet As WorkSheet = workbook.WorkSheets.First()
'This is how we get range from Excel worksheet
Dim range = sheet ("A2:A8")
'This is how we can iterate over our range and read or edit any cell
For Each cell In range
Console.WriteLine(cell.Value)
Next cell
Cette méthode utilise également une ligne de code pour obtenir la plage de valeurs des cellules. Les cellules peuvent alors être mises à jour avec les valeurs requises. Le code est le suivant :
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Get range of values and updating their format
var range = xlWorkSheet.get_Range("A1", "D1");
range.NumberFormat = "$0.00";
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Get range of values and updating their format
var range = xlWorkSheet.get_Range("A1", "D1");
range.NumberFormat = "$0.00";
Dim xlApp As New Excel.Application()
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Open(filePath)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
'Get range of values and updating their format
Dim range = xlWorkSheet.get_Range("A1", "D1")
range.NumberFormat = "$0.00"
Les formules Excel constituent la partie la plus importante du travail avec les fichiers Excel. Les deux bibliothèques permettent de travailler avec des formules et de les appliquer facilement aux cellules.
Après avoir chargé le classeur et la feuille de calcul, l'exemple de code suivant peut être utilisé pour modifier les formules ou les appliquer à des cellules spécifiques. Le code est le suivant :
// Set Formulas
worksheet ["A1"].Formula = "Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "Max(C3:C7)";
// Force recalculate all formula values in all sheets.
workbook.EvaluateAll();
// Set Formulas
worksheet ["A1"].Formula = "Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "Max(C3:C7)";
// Force recalculate all formula values in all sheets.
workbook.EvaluateAll();
' Set Formulas
worksheet ("A1").Formula = "Sum(B8:C12)"
worksheet ("B8").Formula = "=C9/C11"
worksheet ("G30").Formula = "Max(C3:C7)"
' Force recalculate all formula values in all sheets.
workbook.EvaluateAll()
Vous pouvez également récupérer des formules et leurs valeurs.
// Get Formulas
// Get the formula's calculated value. e.g. "52"
string formulaValue = worksheet ["G30"].Value;
//Get the formula as a string. e.g. "Max(C3:C7)"
string formulaString = worksheet ["G30"].Formula;
//Save your changes with updated formulas and calculated values.
workbook.Save();
// Get Formulas
// Get the formula's calculated value. e.g. "52"
string formulaValue = worksheet ["G30"].Value;
//Get the formula as a string. e.g. "Max(C3:C7)"
string formulaString = worksheet ["G30"].Formula;
//Save your changes with updated formulas and calculated values.
workbook.Save();
' Get Formulas
' Get the formula's calculated value. e.g. "52"
Dim formulaValue As String = worksheet ("G30").Value
'Get the formula as a string. e.g. "Max(C3:C7)"
Dim formulaString As String = worksheet ("G30").Formula
'Save your changes with updated formulas and calculated values.
workbook.Save()
De même, après avoir chargé le classeur et la feuille de calcul, le code suivant peut être utilisé pour travailler sur les formules Excel. L'exemple de code est le suivant :
//Get range of values and updating their format
var range1 = xlWorkSheet.get_Range("A1", "D1");
var range2 = xlWorkSheet.get_Range("C2", "C6");
// Set Formula
range1.Formula = "=RAND()*100000";
range2.Formula = "=A2 & \" \" & B2";
//Get range of values and updating their format
var range1 = xlWorkSheet.get_Range("A1", "D1");
var range2 = xlWorkSheet.get_Range("C2", "C6");
// Set Formula
range1.Formula = "=RAND()*100000";
range2.Formula = "=A2 & \" \" & B2";
'Get range of values and updating their format
Dim range1 = xlWorkSheet.get_Range("A1", "D1")
Dim range2 = xlWorkSheet.get_Range("C2", "C6")
' Set Formula
range1.Formula = "=RAND()*100000"
range2.Formula = "=A2 & "" "" & B2"
IronXL est une bibliothèque Excel C# ouvertement commerciale. Il est gratuit pour le développement et peut toujours faire l'objet d'une licence pour un déploiement commercial. Les licences sont disponibles pour l'utilisation d'un seul projet, pour les développeurs individuels, les agences et les entreprises internationales, ainsi que pour la redistribution SaaS et OEM. Toutes les licences comprennent une garantie de remboursement de 30 jours, un an d'assistance et de mises à jour du produit, la validité pour le développement, la mise en place et la production, ainsi qu'une licence permanente(achat unique). Le paquet Lite commence à partir de $749.
Pour Microsoft Office Interop Excel, les applications utilisant ce fichier DLL ne nécessitent pas de licence distincte, que ce soit pour un usage unique ou commercial. Pour qu'une solution puisse fonctionner avec une application Office, les applications Microsoft Office doivent être installées et faire l'objet d'une licence sur la machine où la solution est exécutée. La DLL sera toujours présente sur une machine où l'application Office est installée, et elle y sera enregistrée. Dans le même temps, l'assemblage interop primaire(PIA) nécessaires aux solutions .NET utilisant l'"interop" seront également installées dans le GAC.
Résumé
Lecture et création d'Excel(XLS, XLSX et CSV) en C# et dans tous les autres langages .NET est facile à réaliser grâce à la bibliothèque logicielle IronXL d'Iron Software. IronXL ne nécessite pas l'installation d'Excel sur votre serveur ou Interop. IronXL fournit une API plus rapide et plus intuitive que Microsoft.Office.Interop.Excel. IronXL fonctionne sur .NET Core 2, Framework 4.5, Azure, Mono et, Mobile et Xamarin.
Microsoft Office Interop(Automatisation d'Excel) est une option lors de la création/lecture de fichiers Excel(XLS, XLSX, CSV) à partir d'applications C# ou VB.NET. Il nécessite que toutes les machines clientes aient la même version de Microsoft Excel installée, et il ne fonctionne que sur les systèmes d'exploitation Windows.
Conclusion
IronXL présente ici un net avantage sur Microsoft.Office.Interop.Excel, car il ne nécessite pas l'installation de l'application Microsoft Office Excel sur la machine locale ou le serveur pour fonctionner. En outre, lors de l'utilisation d'Excel Automation, Microsoft Excel est chargé en arrière-plan, ce qui utilise beaucoup de Mo et charge un grand nombre de fichiers et de DLL par rapport à IronXL. IronXL possède une API plus rapide et plus intuitive que celle de Microsoft.Office.Interop.Excel.
Applications Microsoft Office(y compris Excel) ont été conçus comme des applications d'interface utilisateur, et l'API est donc très lente. Microsoft ne recommande pas l'utilisation d'Excel Automation(ou tout Office Interop) sur le serveur. Dans ce cas, avec toutes ses caractéristiques robustes, IronXL est le meilleur choix pour l'intégration dans des applications logicielles.
9 produits de l'API .NET pour vos documents de bureau