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

using Excel = Microsoft.Office.Interop.Excel;

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 :

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();
  }
}

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

Comment supprimer la protection d’une feuille de classeur Excel sans connaitre le mot de passe ?

Si vous avez décidé de protéger le contenu d’une feuille de classeur Excel par un mot de passe et que manque de chance, vous ne vous souvenez pas de ce fameux mot de passe, il existe une solution!

Excel-lock

Il faut savoir que ; lorsque vous mettez un mot de passe sur une feuille de classeur Excel (pour vérouiller l’accès à certaines cellules par exemple), le logiciel ne mémorise pas le mot de passe mais une clé sur 15 bits calculée à partir de ce mot de passe.

Il y a donc des milliards de mots de passe qui ont une clé équivalente puisqu’il y a seulement 2^15 possiblités de clés (32 768 possibilités).

On peut protéger une feuille avec un mot de passe et la déprotéger avec un équivalent, reprotéger avec un autre équivalent etc…

Place au test, il vous suffit d’insérer le code dans un module et d’exécuter la macro en faisant ALT+F8 ou en affectant la macro à un bouton :


Sub supprimer_protection()

Dim a, b, c, d, e, f, g, h, i, j, k, l As Integer

On Error Resume Next
For a = 65 To 66
For b = 65 To 66
For c = 65 To 66
For d = 65 To 66
For e = 65 To 66
For f = 65 To 66
For g = 65 To 66
For h = 65 To 66
For i = 65 To 66
For j = 65 To 66
For k = 65 To 66
For l = 32 To 126
ActiveSheet.Unprotect Chr(a) & Chr(b) & Chr(c) & _
Chr(d) & Chr(e) & Chr(f) & Chr(g) & Chr(h) & _
Chr(i) & Chr(j) & Chr(k) & Chr(l)
If ActiveSheet.ProtectContents = False Then
MsgBox "La Protection a été enlevée - Un mot de passe satisfaisant est :" & Chr(a) & Chr(b) & _
Chr(c) & Chr(d) & Chr(e) & Chr(f) & Chr(g) & _
Chr(h) & Chr(i) & Chr(j) & Chr(k) & Chr(l)
Exit Sub
End If
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next

End Sub

Bien sur, vous pouvez aussi utiliser cette méthode pour accéder aux données d’un fichier qu’un collègue aurait un tout petit peu trop protégé 🙂

Comment réparer un fichier Excel endommagé/corrompu ?

Les fichiers Excel sont bien pratiques pour l’échange de données mais à force de modifier, copier, ajouter des macros, re-copier, re-déplacer le fichier… Il peut être détérioré ou corrompu.

La version 2010 (et supérieure) d’Excel permet de récupérer un fichier à une date ultérieure mais cette option ne s’avère par toujours efficace (surtout si vous ne l’avez pas activé…). Pour activer cette option, rendez-vous ici : Enregistrer et récupérer automatiquement les fichiers Office.

Si à l’ouverture d’un fichier Excel, il plante ou ne veut carrément plus du tout s’ouvrir, pas de panique! Il existe un petit soft disponible ICI (par socrtwo22)

excel_recovery

Test convainquant pour la récupération d’un fichier totalement corrompu qui refusait de s’ouvrir (j’ai pu retrouver toutes mes données intactes, les graphiques étaient simplement à refaire)

Je recommande donc ce soft, bon téléchargement à tous!