2017-09-13 1 views
0

Je travaille sur un programme de sauvegarde de fichiers qui enregistre automatiquement tous les documents Office ouverts. À l'heure actuelle, je travaille avec WORD et j'ai eu des problèmes. Je peux sauvegarder et fermer une instance de mot active, sans qu'aucune boîte de dialogue n'apparaisse, tant qu'une seule est en cours d'exécution. Si plusieurs documents Word sont ouverts, le second document affiche une boîte de dialogue Enregistrer sous lorsque le premier se ferme. Est-ce que quelqu'un sait comment je peux contourner cela ou si c'est possible?C# Enregistrement et fermeture de documents Office, lorsque plusieurs instances/fichiers s'ouvrent simultanément

code permettant d'enregistrer et de clôture,

using Microsoft.Office.Interop.Word; 

    public static bool WordClass1(string doc,string sloc) 

     { 

      if (System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application") != null) 

      { 

       Object oMissing = System.Reflection.Missing.Value; 

       Object oTrue = true; 

       Microsoft.Office.Interop.Word.Application oWordApp = (Microsoft.Office.Interop.Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application"); 

       int i = 0; 
       i++; 
       string num = i.ToString(); 
       Object oSaveAsFileWord = sloc; 
       foreach (Microsoft.Office.Interop.Word.Document document in oWordApp.Documents) 
       { 
        if (string.Equals(document.Name, doc)) 
        { 
         Console.WriteLine("Found Document"); 





         document.SaveAs(ref oSaveAsFileWord, ref oMissing, ref oMissing, ref oMissing, 
         ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
         ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
         ref oMissing, ref oMissing, ref oMissing, ref oMissing); 



         object doNotSaveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges; 

         oWordApp.ActiveDocument.Close(ref doNotSaveChanges, ref oMissing, ref oMissing); 
        } 

       } 

return true;

+0

Pourquoi utilisez-vous 'oWordApp.ActiveDocument' plutôt que' document' dans votre boucle 'foreach'? – mjwills

+0

Eh bien, pour une raison qui a tendance à travailler, se révèle le problème avec le code d'origine que j'ai posté était oWordApp.Quit (ref o Missing, ref o Missing, ref o Missing); J'essayais de fermer tous les mots avant de passer au fichier suivant à sauvegarder. Erreur muette. – user2190928

Répondre

0
public static bool WordClass1(string doc,string sloc) 

     { 

      if (System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application") != null) 

      { 

       Object oMissing = System.Reflection.Missing.Value; 

       Object oTrue = true; 

       Microsoft.Office.Interop.Word.Application oWordApp = (Microsoft.Office.Interop.Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application"); 

       int i = 0; 
       i++; 
       string num = i.ToString(); 
       Object oSaveAsFileWord = sloc; 
       foreach (Microsoft.Office.Interop.Word.Document document in oWordApp.Documents) 
       { 
        if (string.Equals(document.Name, doc)) 
        { 
         Console.WriteLine("Found Document"); 





         document.SaveAs(ref oSaveAsFileWord, ref oMissing, ref oMissing, ref oMissing, 
         ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
         ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
         ref oMissing, ref oMissing, ref oMissing, ref oMissing); 



         object doNotSaveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges; 

         oWordApp.Document.Close(ref doNotSaveChanges, ref oMissing, ref oMissing); 
        } 

       } 
+0

Vous voudrez peut-être ajouter un commentaire ici sur ** quoi ** vous avez changé. Les blocs de code (sans aucun commentaire) ont tendance à être dépréciés ... – mjwills

0

Vous devez utiliser document plutôt que oWordApp.ActiveDocument dans votre boucle foreach.

Ainsi, par exemple, plutôt que:

oWordApp.ActiveDocument.Close 

vous devez utiliser:

document.Close