editar documento desde crear c# ms-word office-interop

documento - docx c#



C#Obtener lista de documentos abiertos de Word (1)

En el primer código, obtiene la lista de documentos abiertos en una instancia abierta de Word

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

y en la segunda parte del código, crea un nuevo documento con una nueva instancia de Word

Microsoft.Office.Interop.Word.Application word_app = new Microsoft.Office.Interop.Word.Application();

por lo que los archivos no se pueden abrir y enumerar por las dos instancias de Word.

Si desea que el primer método pueda obtener el archivo, puede intentar abrir el archivo desde la instancia actual de Word:

Microsoft.Office.Interop.Word.Application word_app; word_app = (Microsoft.Office.Interop.Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application") object inputFile = selected_doc; // "selected_doc" contains the document name object confirmConversions = false; object readOnly = false; object visible = true; object missing = Type.Missing; Document doc = word_app.Documents.Open( ref inputFile, ref confirmConversions, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref visible, ref missing, ref missing, ref missing, ref missing);

Actualmente, estoy usando este código para obtener la lista de documentos abiertos de MS Word:

List<string> doc_list = new List<string>(); try { Microsoft.Office.Interop.Word.Application WordObj; WordObj = (Microsoft.Office.Interop.Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application"); for (int i = 0; i < WordObj.Windows.Count; i++) { object idx = i + 1; Window WinObj = WordObj.Windows.get_Item(ref idx); doc_list.Add(WinObj.Document.FullName); } } catch { // No documents opened }

Y funciona correctamente si los documentos se han abierto "directamente", es decir, haciendo doble clic sobre ellos. Sin embargo, noté que si abría un documento de MS Word directamente desde el código C #, como:

Microsoft.Office.Interop.Word.Application word_app = new Microsoft.Office.Interop.Word.Application(); object inputFile = selected_doc; // "selected_doc" contains the document name object confirmConversions = false; object readOnly = false; object visible = true; object missing = Type.Missing; Document doc = word_app.Documents.Open( ref inputFile, ref confirmConversions, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref visible, ref missing, ref missing, ref missing, ref missing);

cualquier documento abierto de esta manera no se encuentra en el código inicial, pero necesito detectarlo. ¿Por qué no se encuentra? ¿Cómo puedo modificar el código para que se encuentre el documento abierto desde C #?