La fermeture d'un Classeur Excel
J'ai un peu de code qui ouvre un classeur xls;
Excel.Workbooks workBooks;
workBooks = excelApp.Workbooks;
workbook = workBooks.Open(sourceFilePath + sourceFileName + ".xls");
Je puis obtenir la fiche de travail;
worksheets = workbook.Worksheets;
worksheet = worksheets.get_Item("Standard");
Je puis enregistrez le fichier au format csv;
worksheet.SaveAs(sourceFilePath + sourceFileName + ".csv", Excel.XlFileFormat.xlCSVWindows, Type.Missing, Type.Missing, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing);
Ensuite, j'essaie de fermer le classeur;
Marshal.FinalReleaseComObject(worksheet);
Marshal.FinalReleaseComObject(worksheets);
workbook.Close();
Marshal.FinalReleaseComObject(workbook);
Cependant, chaque fois que je reçois à la ligne de classeur.Close(), le système s'arrête.
Si je ne fais pas l'enregistrer sous puis le classeur se ferme très bien.
Comment puis-je fermer un classeur?
modifier
En regardant le Gestionnaire des Tâches m'indique que Excel.exe est toujours en cours d'exécution. De clôture, il produira une erreur dans mon code.
edit 2
J'ai déjà vu l'référencé de SORTE poste et il ne résout pas le problème.
Avez-vous essayé de fermer le classeur avant de relâcher les feuilles de calcul? Ceux qui sont référencés par le classeur donc peut-être qu'ils sont donc absentes sur fermer.
oui et même résultat
double possible de Comment bien nettoyer Excel interopérabilité des objets - C'est d'un ennuyeux prolem vous devez également utiliser les VSTO Contrib, mais même alors, parfois, Excel se bloque toujours autour et beaucoup de gens semblent à la station de tuer le processus, je ne l'avocat
Je l'avais déjà vu que jusqu'à la poste et il n'a pas aidé. Ce n'est pas un doublon
oui et même résultat
double possible de Comment bien nettoyer Excel interopérabilité des objets - C'est d'un ennuyeux prolem vous devez également utiliser les VSTO Contrib, mais même alors, parfois, Excel se bloque toujours autour et beaucoup de gens semblent à la station de tuer le processus, je ne l'avocat
Je l'avais déjà vu que jusqu'à la poste et il n'a pas aidé. Ce n'est pas un doublon
OriginalL'auteur griegs | 2013-07-03
Vous devez vous connecter pour publier un commentaire.
Voici la solution
première:
using EXCEL = Microsoft.Office.Interop.Excel;
et puis,
path
est où votre excel localise.J'ai relié à la même solution, je ne pense pas que vous avez lu toutes les réponses. C'est un doublon et favorise une mauvaise pratique.
Merci Jeremy, je vais le prendre en délibéré.
OriginalL'auteur Hercules
Pourquoi ne pas combiner les 2. Cela va prendre soin de tous les problèmes avec la fermeture avant la sauvegarde est terminée.
Il y a une option dans le
Close
méthode pour enregistrer le fichier.Également si le fichier est de sauver correctement, et votre problème est simplement parce que les excel.exe le processus est toujours en cours d'exécution, il pourrait être parce que vous n'avez pas à proximité et la libération de TOUT ce qui est nécessaire. J'ai eu ça avant, et développé une information plus complète sur fermer dans la routine. Mon code pour la fermeture d'un fichier excel est:
Cela fonctionne 100% du temps pour moi.
J'ai élargi ma réponse avec un code plus complet pour la fermeture (note: la variable
allBooks
estworkBooks
dans votre code.OriginalL'auteur SeeMoreGain
Avez-vous tenu compte du fait que le système pourrait encore être dans le processus de l'enregistrement du fichier lorsque vous tentez de fermer? Je dis juste que, pour être sûr ajouter un délai(Thread.Sleep(1000) en C# par exemple) avant de le fermer pour voir si ce n'est le problème.
OriginalL'auteur Tenescu Andrei
Cette question ne cesse d'apparaître, voir:
Comment bien nettoyer Excel interopérabilité des objets en C#
Vous avez besoin d'appeler Système.Moment de l'exécution.InteropServices.Maréchal.ReleaseComObject() sur chaque objet excel que vous utilisez, même invisibles, par exemple:
var worksheet = excelApp.Worksheets.Open()
Il y a deux objets:
1. L'évidente "Feuille de calcul" ouvert avec Open()
2. "L'invisible" collection "Feuilles de travail'.
Deux d'entre eux ont besoin d'être libéré (afin de mieux garder une référence pour les Feuilles de calcul):
OriginalL'auteur Eli Algranti
EXCEL.Application excel = new EXCEL.Application();
essayez
{
EXCEL.Classeur livre = excel.Application.Les classeurs.Open(chemin);
EXCEL.Feuille de calcul feuille = livre.Les feuilles de calcul[1];
//yout opération
Merci!!!!!!!
OriginalL'auteur user2853852