Vérification de l'ouverture d'un classeur Excel
Est-il un moyen de voir si un Classeur Excel, dire DataSheet.xls est ouvert (en cours d'utilisation) ou pas? Pour terminer, je voudrais que le Classeur s'il est ouvert.
source d'informationauteur Rabin
Vous devez vous connecter pour publier un commentaire.
La bonne façon est d'examiner la Demande.Objet de classeurs. En VBA, on peut écrire:
En d'autres termes, des Classeurs est un tableau (ou en VBA termes, la Collecte) de tous les classeurs ouverts.
En C#, le code suivant fonctionne:
Vous aurez probablement envie de passer à la référence à Excel.L'Application vous-même.
Essayez ceci:
Ce sera tryand ouvrir le fichier exclusivement. Si le fichier est déjà ouvert, il va lever une exception, d'où vous pouvez (essayer) de le fermer et à transporter.
Pour toute personne intéressée par une doublure qui permet d'éviter d'utiliser un try-catch...
Ou avec des noms pleinement qualifiés...
Bien sûr, vous pouvez scinder ce un peu de tout. Le point principal est d'utiliser LINQ au lieu de try-catch pour vérifier le classeur de l'existence.
Note 1:
Marshal.GetActiveObject("Excel.Application")
provoquera une erreur si aucune instance d'Excel est ouvert. Donc, à moins que le contraire garanti ou manipulé, il doit toujours être dans un try-catch.Note 2:
Marshal.GetActiveObject("Excel.Application")
ne retourner une instance de microsoft Excel. Si vous avez besoin à la recherche d'une quelconque instance d'Excel puis le code ci-dessous peut être une meilleure alternative.Meilleure Alternative
Si vous n'avez pas l'esprit en ajoutant une classe d'aide du code ci-dessous peut être une meilleure alternative. En plus d'être en mesure de rechercher toutes les instances ouvertes de Excel, il vous permet également de vérifier le chemin d'accès complet et le retour de la réelle de l'objet workbook s'il est trouvé. Il permet également d'éviter de lancer une erreur si aucune instance d'Excel est ouvert.
utilisation serait comme ça...
ou
J'ai adapté le
GetRunningObjects()
méthode dans le code ci-dessus à partir de ici.Ce n'est pas particulièrement agréable - nous allons essayer d'ouvrir le fichier et d'examiner l'exception en cas d'échec. Je ne suis pas sûr que vous avez d'autres choix en C#.
Cependant, il est important de gérer l'exception correcte: Fondamentalement, nous essayons d'ouvrir le fichier sans partage autorisé. Si elle échoue, ET nous obtenir le bon type d'exception ET nous obtenons le message correct à l'exception, alors nous savons qu'il est ouvert.
Obviosuly ce type de démarche est fragile à l'égard de l'exception message modifié dans une version future de .Net. Vous pouvez compléter ces fonctionnalités avec un test volontairement verrouille un fichier, puis appelle pour vérifier qu'il détecte correctement le message.
Si vous avez de la feuille de calcul du classeur et des objets, vous pouvez les parents vérifier
si (la feuille.Parent == classeur)
martin réponse ne fonctionne pas si l'Application Excel n'est pas en cours d'exécution.
Vous pouvez modifier le code comme suit :
Vous remercie de votre attention. Ce qui concerne