Ouvrir et lire un fichier Excel à partir d’une application C# WPF

Petit tutoriel qui permet d’ouvrir et de lire les valeurs d’un fichier Excel à partir d’une application C# WPF. Cette manipulation vous donnera la possibilité d’afficher ces données à l’écran, de les insérer dans une base de données, etc…

Ajout d’une référence, quelques lignes de code et le tour est joué.

Etape 1 : Ajout de la référence au projet

Pour commencer, il faut ajouter la référence Excel à votre projet C#.

  • Faites un clic droit sur votre projet
  • Cliquez sur “Ajouter une référence…”
  • Sélectionnez l’onglet “COM”
  • Cherchez “Microsoft Excel XX.X Object Library” (voir ci-dessous)

excel_object_library

Vous devriez voir apparaître la référence (dans le volet de droite), une référence appelée “Microsoft.Office.Interop.Excel” :

interop_excel

Etape 2 : Ajout de la référence dans le code

A ajouter dans la partie “directive” du code de votre form ou classe (tout en haut) :

[csharp]using Excel = Microsoft.Office.Interop.Excel;[/csharp]

Etape 3 : Ajout des méthodes d’ouverture/lecture

Pour ouvrir l’explorateur de fichiers windows, sélectionner un fichier, l’ouvrir et lire les données qu’il contient, il faut ajouter les deux méthodes ci-dessous :

[csharp]private void OuvertureLectureXLS()
{
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
Excel.Range range;

string str;
int rCnt = 0;
int cCnt = 0;
OpenFileDialog OpenFileDialog1 = new OpenFileDialog();
OpenFileDialog1.Filter = "Excel files (*.xls*)|*.xls*;";
OpenFileDialog1.ShowDialog();
if (OpenFileDialog1.FileName != String.Empty)
{
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Open(OpenFileDialog1.FileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
range = xlWorkSheet.UsedRange;
cCnt = 1;
for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
{
for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
{
str = Convert.ToString((range.Cells[rCnt, cCnt] as Excel.Range).Value2);
MessageBox.Show(str);
}
}
xlWorkBook.Close(true, null, null);
xlApp.Quit();
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
}
}

private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Unable to release the Object " + ex.ToString());
}
finally
{
GC.Collect();
}
}
[/csharp]

Maintenant il ne vous reste plus qu’à appeler la méthode “OuvertureLectureXLS()” à partir du clic d’un bouton ou autre…

Insérer des données (par le code) dans un DataGrid WPF

Dans cet article je décris la manière d’insérer des données (par le code), dans un DataGrid en WPF (C#). Super pratique lorque l’on souhaite modifier dynamiquement le contenu d’un tableau à l’aide d’une base de données.

Création du DataGrid

Pour commencer, il faut insérer un DataGrid basique dans le fichier XAML.
Ce DataGrid va s’appeler “dataGrid1” (nom pas défaut)

1creationDataGrid

[csharp]
<DataGrid Height="200" HorizontalAlignment="Left" Margin="150,50,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="350" />
[/csharp]

Classe Utilisateur

Maintenant dans le code (fichier MainWindow.xaml.cs), il faut ajouter l’objet ‘Utilisateur’ :

[csharp]
public class Utilisateur
{
public int ID { get; set; }
public string Nom { get; set; }
public string Prenom { get; set; }
public DateTime DateNaissance { get; set; }
}
[/csharp]

Création de la liste d’objets

Une fois l’objet ‘Utilisateur’ créé, il va falloir créer une liste d’objets que nous allons ensuite affecter au DataGrid :

[csharp]
public List<Utilisateur> listeUtilisateurs()
{
List<Utilisateur> users = new List<Utilisateur>();
users.Add(new Utilisateur(){
ID = 1,
Nom= "Bronner",
Prenom= "Joey",
DateNaissance= new DateTime(1980, 5, 21) });
return users;
}
[/csharp]

Ajout de la liste à la source de données

Maintenant , la dernière étape consiste à affecter la liste d’utilisateurs aux données d’entrées de notre DataGrid.

[csharp]

<span style="font-size: small;">dataGrid1.ItemsSource = listeUtilisateurs();</span>

[/csharp]

Voilà, notre DataGrid devrait ressembler à ça en lançant l’appli :

2resultatDataGrid

A vous d’adapter ce code à une boucle de parcours de votre base de données ou autre.

_______________

Le code complet du fichier MainWindow.xaml.cs :

[csharp]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace dataGridApp
{
/// <summary>
/// Logique d’interaction pour MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
dataGrid1.ItemsSource = listeUtilisateurs();
}

public class Utilisateur
{
public int ID { get; set; }
public string Nom { get; set; }
public string Prenom { get; set; }
public DateTime DateNaissance { get; set; }
}

public List<Utilisateur> listeUtilisateurs()
{
List<Utilisateur> users = new List<Utilisateur>();
users.Add(new Utilisateur()
{
ID = 1,
Nom = "Bronner",
Prenom = "Joey",
DateNaissance = new DateTime(1980, 5, 21)
});
return users;
}
}
}

[/csharp]

Récupérer la ou les date(s) selectionnée(s) dans un Calendrier WPF

Dans ce petit bout de code, je vais vous partager la façon de récupérer l’ensemble des dates sélectionnées dans un calendrier WPF.
Une fois récupérées, je stock ces valeurs dans une liste (elles pourront donc être utilisées à tout moment).

Au préalable, il faut avoir un calendrier de ce type :

calendrierWPF

Avec les propriétés qui permettent de sélectionner plusieurs dates en même temps :

selectionModeCalendrierWPFEnsuite vous pouvez placer le code ci-dessous, à l’endroit où vous avez besoin d’utiliser/stocker les dates (clic sur un bouton, changement de sélection, etc…)

[csharp]

List<string> listDates = new List<string>();
for (int i = 0; i <= calendrierDates.SelectedDates.Count – 1; i++)
{
listDates.Add(calendrierDates.SelectedDates[i].ToShortDateString());
}

[/csharp]

N’oubliez pas de remplacer “calendrierDates” par le nom de votre calendrier.

Toutes les dates sélectionnées par l’utilisateur sont maintenant stockées dans la liste listDates.