L'enregistrement et la Fermeture d'un Fichier Excel Créé en C# .Net à l'Aide d'Excel Office Interop dll

Que je vais avoir vraiment du mal à trouver une bonne documentation sur la façon de bien le fermer et enregistrer un fichier Excel à l'aide de l'Exce; Office Interop dll.

En gros, j'ai tout de travail en ce qui concerne la création d'un nouveau classeur Excel et de remplissage de la première feuille de calcul avec les données d'une liste (quand j'ai mis le visible true à la propriété sur l'objet application, je peux regarder le fichier Excel ouvrir et remplir la feuille de calcul exactement la façon dont je le veux.)

J'ai juste besoin de savoir comment faire pour fermer correctement le fichier Excel et de le sauvegarder à un endroit de mon choix. Je veux m'assurer de tuer Excel complètement lorsque le code est fait -- ne veux pas qu'il continue à occuper la mémoire quand je suis fini.

Droit maintenant, je suis en train de faire ce qui suit après le remplissage de la feuille de calcul avec les données que je veux:

workbook.Save();
workbook.Close(Type.Missing, Type.Missing, Type.Missing);
application.Quit();

Mise à JOUR: je suis maintenant en mesure d'enregistrer le fichier Excel à l'emplacement que je veux. J'ai simplement supprimé la Save() de l'appel et a changé l'appel de Close (true, chemin d'accès, Tapez.Manquant) et il est en train de mettre le fichier à l'emplacement souhaité.

Seule question à résoudre est de fermer correctement l'objet COM.

SOLUTION POSSIBLE Au moins ce qui semble supprimer Excel à partir du gestionnaire des tâches chaque fois que le code se termine en cours d'exécution.

//Close the workbook, tell it to save and give the path.
workbook.Close(true, workbookPath, Type.Missing);

//Now quit the application.
application.Quit();

//Call the garbage collector to collect and wait for finalizers to finish.
GC.Collect();
GC.WaitForPendingFinalizers();

//Release the COM objects that have been instantiated.
Marshal.FinalReleaseComObject(workbook);
Marshal.FinalReleaseComObject(worksheet);
Marshal.FinalReleaseComObject(workrange);
Marshal.FinalReleaseComObject(application);

Je crois que cela va fonctionner. Je pense que le problème était que je n'étais pas libérant de tout ce qui avait été instancié et je pense que forcer le gouvernement pour collecter était la pièce manquante. J'ai couru ce 20 fois et à chaque fois que le Gestionnaire des Tâches ne montrent Excel, puis le retirer une fois le code fini.

Dernière mise à JOUR: Le code ci-dessus est certainement l'élimination de tous les objets COM et tout fonctionne correctement.

Qui regarde, à droite, pour moi, ce qui fait que vous croyez que vous ne pouvez pas être en train de faire?
Excel affiche toujours dans le gestionnaire des tâches après le code s'exécute, veulent juste s'assurer qu'il ne va pas y rester et de porcs de la mémoire.
Alors je pense que votre problème n'est pas avec la fermeture d'Excel, c'est avec l'élimination de certains autres objets Excel. Découvrez ce StackOverflow question qui peut vous aider. stackoverflow.com/questions/158706/...

OriginalL'auteur Gary Gerson | 2011-09-28