comment fermer une instance de document Word? (C#)
J'ai pu voir beaucoup de très similaire fils tout autour, mais rien ne semble me donner une solution qui devrait être très basique.
À partir de mon application winforms, j'ai besoin de fermer une instance en cours d'exécution d'un document word (ouvert à partir de l'application elle-même). Quand j'ouvre le document word à partir de l'application, je garde une trace de celui-ci dans une liste. Maintenant, comment puis-je fermer le même doc?
Voici ce que j'ai essayé:
private bool CloseWord(string osPath) //here I pass the fully qualified path of the file
{
try
{
Word.Application app = (Word.Application)Marshal.GetActiveObject("Word.Application");
if (app == null)
return true;
foreach (Word.Document d in app.Documents)
{
if (d.FullName.ToLower() == osPath.ToLower())
{
d.What? //How to close here?
return true;
}
}
return true;
}
catch
{
return true;
}
}
Je reçois beaucoup de méthodes de l'objet document, mais seulement un .Close()
à proximité qui a des arguments comme ceci: ref object SaveChanges, ref object OriginalFormat, ref object RouteDocument
dont je ne comprends pas.
Quel est le moyen idéal? Merci..
Edit:
-
Je ne peux pas fermer la totalité de l'application Word (WinWord) que les utilisateurs peuvent avoir d'autres fichiers word ouvert.
-
J'ai juste besoin de mettre fin à l'instance de word (quelque chose comme
Process.Kill()
), sans inviter l'utilisateur à enregistrer ou pas etc.
Vous devez vous connecter pour publier un commentaire.
Cette solution a obtenu de ici en résout.
L'utiliser quelque chose comme:
Modifié À Partir De: http://www.dreamincode.net/code/snippet1541.htm
Je sais que c'est trop tard, mais j'ai trouvé ce sujet parce que j'ai eu le même problème.
Et ma solution peut aider d'autres personnes.
La solution ci-dessus ne fonctionne pas bien parce qu'il a tué chaque instance en cours d'exécution de Mot, mais il n'était pas ouvert par le programme c# mais l'utilisateur.
Ce n'était pas que convivial.
Mon code vérifie les processus avant/après la création de la
Word.Application
Objet en c# et écrit l'Id de laWINWORD
ProcessusList<int>
il compare ensuite les valeurs dans les deux
List<int>
.Lorsqu'un
processID
n'est pas trouvé dans les deuxList<int>
il tue le processus avec cet ID.Exécuter deux fois (une fois avant la création de la Parole.L'Application et la fois d'après).
Puis exécutez
killProcesses(processesbeforegen, processesaftergen);
Si vous souhaitez fermer toute application word, vous pouvez les appeler: