IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Office > Excel
        Comment lire dans un fichier Excel ?
        Comment écrire dans un fichier Excel ?
        Comment mettre en forme un fichier Excel ?



Comment lire dans un fichier Excel ?
auteur : Skalp
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.

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());
    }
}
Pour plus d'informations sur les propriétés de la chaîne de connexion, allez voir la partie consacrée à Excel sur en ConnectionStrings.com.

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 ?)

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.

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.
lien : en Koogra Excel BIFF Reader Library
lien : fr Open XML : un nouveau format s'ouvre à vous
lien : fr Le XML dans Microsoft Office (OpenXML)
lien : fr Structure des fichiers OpenXML
lien : fr Lire et modifier un document Word OpenXML en C#

Comment écrire dans un fichier Excel ?
auteur : 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.

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.

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();
	}
}
Pour plus d'informations sur les propriétés de la chaîne de connexion, allez voir la partie consacrée à Excel sur en ConnectionStrings.com.

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 ?)

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.
lien : fr Open XML : un nouveau format s'ouvre à vous
lien : fr Le XML dans Microsoft Office (OpenXML)
lien : fr Structure des fichiers OpenXML
lien : fr Créer un fichier Word OpenXML avec .Net
lien : fr Comment générer un fichier Excel en ASP.NET

Comment mettre en forme un fichier Excel ?
auteur : 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 :

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.



Consultez les autres F.A.Q's


Valid XHTML 1.0 TransitionalValid CSS!

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 © 2010 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.