10
votes

C # et Excel Interop

Un de mes utilisateurs a un problème lors de la tentative d'ouverture d'un fichier Excel via mon application C #.

Tout fonctionne bien lorsque je l'exécute de ma machine et que cela fonctionne pour d'autres utilisateurs. Je ne suis pas exceptionnel interop expert, j'espère que vous pouvez m'aider.

Voici comment il est configuré:

J'ai ajouté une référence à mon application à Microsoft.Office.Interop .Excel.dll, version 10.0.4504.0 (que je crois est Excel 2002). Sur ma machine, j'ai installé Excel 2007. Dans mon code, j'essaie d'ouvrir une feuille de calcul comme si: xxx

I a enregistré la version des utilisateurs comme Excel 9.0 (qui est 2000). L'erreur que l'utilisateur obtient est: xxx

On dirait que le classeur ne peut pas être ouvert. Le fichier a été confirmé qu'il existait et était simplement lâché sur le PC de l'utilisateur à C :. Je pensais en utilisant la PIA, je n'aurais pas à vous soucier des problèmes de la version Excel. Je sais qu'il existe d'autres utilisateurs utilisant Excel 2000 et cela fonctionne sur ma machine de développement.

Des idées? Peut-être que mes appels pour ouvrir le fichier Excel devraient être modifiés? La chose malheureuse est que je suis incapable de le reproduire.


1 commentaires

Veuillez aider cela si vous pouvez Stackoverflow.com/Questtions/9962157/...


3 Réponses :


2
votes

J'utilise microsoft.office.interop.excel.dll: Version d'exécution: V1.1.4322 Version: 12.0.0.0

pourrait essayer ceci: xxx


0 commentaires

0
votes

Je suis venu pour vous permettre d'économiser des fichiers Excel sous forme de feuilles de calcul XML, puis de les ouvrir avec des objets System.xml. XML J'utilise beaucoup pour toutes sortes de choses, tandis que INTEROP est quelque chose d'art noir pour moi. Ce n'est peut-être pas assez bon pour vos besoins, mais si tel est le cas, c'est probablement beaucoup plus facile que des omniprés avec les bibliothèques interopes.


0 commentaires

14
votes

"Je pensais en utilisant la Pia, je ne voudrais pas avoir à s'inquiéter de la version Excel problèmes. Je sais qu'il y a d'autres utilisateurs Utiliser Excel 2000, et ça marche sur mon Dev Machine. "

presque vrai, mais pas tout à fait.

En développant contre la PIA pour Excel 2002, votre programme sera compatible pour toutes les versions d'Excel 2002 (10,0) et ci-dessus. La machine à défaillance est toutefois en cours d'exécution avec Excel 2000 (9.0), qui est une version inférieure à la version que vous avez développée.

Il n'y a pas de PIA pris en charge officiellement sous Excel 2002, donc si vous avez besoin de votre programme pour exécuter sur Excel 2000 (9.0), vous devrez créer votre propre assemblage personnalisé. Vous pouvez utiliser TLBIMP.exe pour créer un assemblage Interop pour Excel 9.0, comme expliqué dans l'article Atteindre la compatibilité en arrière avec .NET Interop: Excel comme étude de cas .

Si votre assembly est nommé, alors vous devez créer un assemblage interop solide nommé. Cela peut être fait en fournissant le nom de votre fichier .pfx ou .snk via le commutateur / keyfile, comme illustré dans l'article Comment créer un ensemble d'interopteurs principaux (PIA) . Cet article utilise également l'interrupteur principal afin de créer un «assemblage interopteur principal». Faire le primaire de l'Assemblée Interop n'est pas vraiment nécessaire dans votre cas, mais ne fait pas mal. Ce que l'article omette, cependant, est l'utilisation de l'interrupteur / sysarray que vous devriez utiliser.

Faire un assemblage interop solide nommé a des complexités à considérer, cependant. Pour plus de détails, avoir une lecture de Utiliser tlbimp.exe pour créer de forts assemblages interops nommés . (Entre autres choses, cet article explique le besoin d'interrupteur / sysarray.)

En bref, la fabrication d'un assemblage interopest personnalisé est très simple si votre assemblée n'est pas forte nommée. Il est plus compliqué si votre assemblée est nommée et, par conséquent, vous devez créer un assemblage interop solide nommé. Mais j'espère que ces articles devraient vous faire aller.

- Mike


1 commentaires

Pas de problème Jaspion ... BTW, si vous utilisez .NET 4.0, vous n'avez plus besoin de créer des assemblages interopers. :-) Donc, ce besoin de cette solution n'est que pour .NET 3.5 et ci-dessous.