FAQ C#Consultez toutes les FAQ

Nombre d'auteurs : 39, nombre de questions : 272, dernière mise à jour : 24 mai 2015  Ajouter une question

 

Cette FAQ a été réalisée pour répondre aux questions les plus fréquemment posées concernant C# sur le forum Développement DotNET

Je tiens à souligner qu'elle ne garantit en aucun cas que les informations qu'elle contient sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci .

Sur ce, je vous souhaite une bonne lecture.

Commentez cette FAQ : Commentez


SommaireOfficeExcel (3)
précédent sommaire suivant
 

Il existe plusieurs méthodes pour récupérer les données d'un fichier Excel. Chacune a ses avantages et inconvénients. A vous de choisir celle qui correspond le mieux à vos besoins.

1. ADO.NET
Inclure l'espace de nom : System.Data.OleDb.

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string filePath = @"C:\Classeur1.xls"; 
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0\";"; 
OleDbConnection connection = new OleDbConnection(connectionString); 
string cmdText = "SELECT * FROM [Feuil1$]"; 
OleDbCommand command = new OleDbCommand(cmdText, connection); 
  
command.Connection.Open(); 
OleDbDataReader reader = command.ExecuteReader(); 
  
if (reader.HasRows) 
{ 
    while (reader.Read()) 
    { 
        Console.WriteLine("{0}\t{1}", reader[0].ToString(), reader[1].ToString()); 
    } 
}
Avantages :
  • Les performances d'accès sont celles d'un accès ADO.NET.
  • Office Excel n'est pas requis sur le poste de travail.

Inconvénients :
  • Il n'est pas possible de lire les informations de mise en forme (couleurs, polices,?), des fonctions avancées (graphiques, images,?) et des macros.

2. Automation
Inclure l'espace de nom : Microsoft.Office.Interop.Excel (ou une variante. Voir : Comment piloter une application Office dans mon application .NET par automation ? )

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
string filePath = @"C:\Classeur1.xls"; 
_Application application = new ApplicationClass(); 
_Workbook workbook = application.Workbooks.Open(filePath, Type.Missing, Type.Missing, Type.Missing, 
                                                Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                                                Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                                                Type.Missing, Type.Missing, Type.Missing); 
_Worksheet worksheet = (_Worksheet)workbook.ActiveSheet; 
Range range; 
  
for (int i = 1; i < worksheet.Rows.Count + 1; i++) 
{ 
    // A la première cellule vide, sortir de la boucle : 
    if ((worksheet.Cells[i, 1] == null || ((Range)worksheet.Cells[i, 1]).Value2 == null) && 
        (worksheet.Cells[i, 2] == null || ((Range)worksheet.Cells[i, 2]).Value2 == null)) 
    { 
        break; 
    } 
  
    // Lire les cellules : 
    Console.WriteLine("{0}\t{1}", ((Range)worksheet.Cells[i, 1]).Value2.ToString(), ((Range)worksheet.Cells[i, 2]).Value2.ToString()); 
} 
  
workbook.Close(false, Type.Missing, Type.Missing); 
application.Quit();
Remarque : pour les méthodes Open et Close, le nombre d'argument peut varier en fonction de la version de librairie utilisée.

Avantages :
  • Tout ce qu'il est possible de faire sous Excel est possible avec l'automation (il faut juste savoir comment le faire...).

Inconvénients :
  • Pour manipuler de grands volumes de données, les performances sont faibles (plus précisément : pour parcourir la feuille cellule par cellule. Il est possible de rester sur des performances relativement élevées en travaillant par exemple avec l'objet Range, des tableaux ou le presse-papier).
  • Office Excel doit être installé sur le poste de travail.

3. Bibliothèque Koogra Excel BIFF Reader Library
Télécharger la bibliothèque sur le site SourceForge.net.
Référencer la bibliothèque :


Inclure l'espace de noms Net.SourceForge.Koogra.Excel.

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
string filePath = @"C:\Classeur1.xls"; 
Workbook workbook = new Workbook(filePath); 
Worksheet worksheet = workbook.Sheets.GetByName("Feuil1"); 
  
for (ushort i = 0; i <= worksheet.Rows.LastRow; i++) 
{ 
    Console.WriteLine("{0}\t{1}", worksheet.Rows[i].Cells[0].Value.ToString(), worksheet.Rows[i].Cells[1].Value.ToString()); 
}
Avantages :
  • Office Excel n'est pas requis sur le poste de travail.

Inconvénients :
  • Il n'est pas possible de lire les informations des fonctions avancées (graphiques, images...) et des macros.
  • Ne fonctionne pas pour des fichiers au format OpenXML.

4. OpenXML : Lire et modifier un document Word OpenXML en C# (et autres liens)
Consultez les différents articles Developpez.com sur le sujet :


Avantages :
  • Le fichier est au format XML.
  • Office Excel n'est pas requis sur le poste de travail.

Inconvénients :
  • Ce format ne peut pas être lu pour des versions antérieures à Office Excel 2003.

Mis à jour le 8 mars 2010 Skalp

Il existe plusieurs méthodes pour écrire des données dans un fichier Excel. Chacune a ses avantages et inconvénients. A vous de choisir celle qui correspond le mieux à vos besoins.

1. CSV
Inclure l'espace de nom : System.IO.

Le format CSV est un format texte avec séparateurs de champs. Ce n'est pas le format Excel à proprement parler, mais il y est très souvent associé. Il est très simple d'ouvrir ce type de fichier dans Excel pour qu'il soit interprété en tableur.

La génération de fichiers CSV est de loin la plus simple, la plus performante et celle qui satisfait au besoin de pouvoir visualiser des données sous Excel.

Code c# : Sélectionner tout
1
2
3
4
using (StreamWriter streamWriter = new StreamWriter(@"C:\Classeur1.csv")) 
{ 
    streamWriter.WriteLine("Valeur dans la cellule A1;Autre valeur dans la cellule A2"); 
}
Avantages :
  • Le fichier est au format texte.
  • Office Excel n'est pas requis sur le poste de travail.
  • Très simple à mettre en oeuvre.
  • Très performant à générer.
  • Un fichier peut être généré dans un maximum d'environnements (winform, webform, webservice...).

Inconvénients :
  • Le format CSV peut ne pas être associé directement à Excel (auquel cas il suffit d'ouvrir Excel, puis d'importer les données à partir du fichier).
  • Il n'est pas possible de générer des informations de mise en forme (couleurs, polices...), des fonctions avancées (graphiques, images...) et des macros.

2. ADO.NET
Inclure l'espace de nom : System.Data.OleDb.

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
string filePath = @"C:\Classeur1.xls"; 
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0\";"; 
using (OleDbConnection connection = new OleDbConnection(connectionString)) 
{ 
    connection.Open(); 
  
	// Le nom des colonnes se trouve en première ligne de la feuille. 
	// Ici les colonnes concernées s'intitulent COL 1 et COL 2 : 
	string cmdText = "INSERT INTO [Feuil1$] ([COL 1], [COL 2]) VALUES ('Valeur dans la cellule A1', 'Autre valeur dans la cellule A2')"; 
	using (OleDbCommand command = new OleDbCommand(cmdText, connection)) 
	{ 
		command.ExecuteNonQuery(); 
	} 
}
Avantages :
  • Les performances d'accès sont celles d'un accès ADO.NET.
  • Office Excel n'est pas requis sur le poste de travail.

Inconvénients :
  • Il n'est pas possible de générer des informations de mise en forme (couleurs, polices...), des fonctions avancées (graphiques, images...) et des macros.

3. Automation
Inclure l'espace de nom : Microsoft.Office.Interop.Excel (ou une variante. Voir : Comment piloter une application Office dans mon application .NET par automation ? )

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
string filePath = @"C:\Classeur1.xls"; 
_Application application = new ApplicationClass(); 
_Workbook workbook = application.Workbooks.Open(filePath, Type.Missing, false, Type.Missing, 
                                                Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                                                Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                                                Type.Missing, Type.Missing, Type.Missing); 
_Worksheet worksheet = (_Worksheet)workbook.ActiveSheet; 
  
((Range)worksheet.Cells[1, 1]).Value2 = "Valeur dans la cellule A1"; 
((Range)worksheet.Cells[1, 2]).Value2 = "Autre valeur dans la cellule A2"; 
  
workbook.Save(); 
workbook.Close(false, Type.Missing, Type.Missing); 
application.Quit();
Remarque : pour les méthodes Open et Close, le nombre d'argument peut varier en fonction de la version de librairie utilisée.

Avantages :
  • Tout ce qu'il est possible de faire sous Excel est possible avec l'automation (il faut juste savoir comment le faire...).

Inconvénients :
  • Pour manipuler de grands volumes de données, les performances sont faibles (plus précisément : pour parcourir la feuille cellule par cellule. Il est possible de rester sur des performances relativement élevées en travaillant par exemple avec l'objet Range, des tableaux ou le presse-papier).
  • Office Excel doit être installé sur le poste de travail.

4. OpenXML
Consultez les différents articles Developpez.com sur le sujet :


Avantages :
  • Le fichier est au format XML.
  • Office Excel n'est pas requis sur le poste de travail.

Inconvénients :
  • Ce format ne peut pas être lu pour des versions antérieures à Office Excel 2003.

Mis à jour le 8 mars 2010 Skalp

Pour mettre en forme un fichier Excel, la principale solution (gratuite) est de passer par l'automation. L'exemple ci-dessous montre comment modifier les bordures et trame d'une cellule :

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string filePath = @"C:\Classeur1.xls"; 
_Application application = new ApplicationClass(); 
application.DisplayAlerts = false; // Ne pas afficher les alertes, telles que boites de dialogues de confirmation. 
_Workbook workbook = application.Workbooks.Open(filePath, Type.Missing, false, Type.Missing, 
                                                Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                                                Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                                                Type.Missing, Type.Missing, Type.Missing); 
_Worksheet worksheet = (_Worksheet)workbook.ActiveSheet; 
  
Range maCellule = ((Range)worksheet.Cells[1, 1]); 
maCellule.Borders.Color = XlRgbColor.rgbRed; // Définir la couleur des bordures à rouge 
maCellule.Interior.Color = XlRgbColor.rgbGreen; // Définir la couleur de fond à vert 
  
workbook.Save(); 
workbook.Close(false, Type.Missing, Type.Missing); 
application.Quit();
Pour plus d'informations sur le modèle objet Excel, consulter : Où puis-je trouver de la documentation sur l'automation Office ?

Remarque : pour les méthodes Open et Close, le nombre d'argument peut varier en fonction de la version de librairie utilisée.

Mis à jour le 8 mars 2010 Skalp

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsable bénévole de la rubrique Microsoft DotNET : Hinault Romaric -