2013-09-19 6 views
5

В настоящее время я использую этот код, чтобы получить список MS Word открытых документов:C# Получить список открытых документов 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 
} 

И это работает правильно, если документы были открыты «напрямую», т.е. дважды щелкнув по ним. Однако я заметил, что если я открыть документ MS Word непосредственно из C# код, как:

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); 

любой документ, открытый в этом случае не найден в intial кода, но мне нужно, чтобы обнаружить его. Почему это не найдено? Как я могу изменить код, чтобы документ, открытый с C#, был найден?

ответ

4

В первом коде, вы получите список открытых документов в открытом экземпляре Слово

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

и во второй части коды, вы создаете новый документ с Новым экземпляром Слова

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

поэтому файлы не могут быть открыты и указаны двумя экземплярами Word.

Если вы хотите, чтобы первый способ быть в состоянии получить файл, вы можете попытаться открыть файл из текущих экземпляра 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); 
+0

нормально, я понимаю, большое спасибо, это работает – yuko

Смежные вопросы