Après m’être battu avec .net et Excel voici la solution trouvée :

Installer Excel 2003 sur le poste de développement 

Mais ce serait trop simple si ça devait marcher directement, en effet lorsque excel 2007 et 2003 sont installés sur une même machine, les interops des 2 versions sont dans le GAC (C:\WINDOWS\assembly\GAC\Microsoft.Office.Interop.Excel).

Et il existe une règle (policy bindingRedirect) qui indique qu’il faut toujours prendre l’interop 2007 (v 12.0) même lorsque l’on référence l’interop 2003 (v 11.0) dans Visual studio.

 

Cette policy se matérialise par le présence d’un fichier config dans le GAC :

C:\WINDOWS\assembly\GAC\Policy.11.0.Microsoft.Office.Interop.Excel\12.0.0.0__71e9bce111e9429c\Policy.11.0.Microsoft.Office.Interop.Excel.config

 

Donc pour supprimer cette règle il « suffit » de supprimer le fichier Policy.11.0.Microsoft.Office.Interop.Excel.config.

 Evidemment puisqu’il s’agit d’un fichier du GAC ce n’est pas possible via l’explorateur !!!

 

Donc il faut passer par la ligne de commande :

 

cd /D C:\WINDOWS\assembly\GAC\Policy.11.0.Microsoft.Office.Interop.Excel\12.0.0.0__71e9bce111e9429c

move Policy.11.0.Microsoft.Office.Interop.Excel.config Policy.11.0.Microsoft.Office.Interop.Excel.config.sav

 

Maintenant sous Visual studio on peut ajouter l’interop Excel v 11.0 : 

  • Ajouter une référence…
  • Onglet COM
  • Sélectionner « Microsoft Excel 11.0 Object Library »
  • Dans les références sélectionner la référence Excel
  • On vérifiera dans les propriétés que le chemin d’accès est « C:\WINDOWS\assembly\GAC\Microsoft.Office.Interop.Excel\11.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll »
  • Et que « copie locale » =  true

Et voila…

 

PS : autre problème rencontré (mais non résolu)

L’interop Excel est référencée dans un projet que l’on nommera SearchInFile, ce dernier étant référencé dans le projet de démarrage/principal (de type winform).

La dll d’interop est copiée du GAC vers le bin du sous-projet SearchInFile, mais pas dans le bin du projet principal….

 

 PPS : Il semblerait qu’il y ai une autre méthode moins brutal qui consisterai à ajouter dans un fichier app.config un bindingRedirect dnas l’autre sens (V12 –> v11).

L’avantage on ne touche pas au fichier du GAC et la suppression de la règle est spécifique à l’application.

Les commentaires sont fermés.