7

現在、このコードを使用して、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
}

また、ドキュメントが「直接」開かれた場合、つまりドキュメントをダブルクリックして開いた場合も正しく機能します。ただし、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);

この方法で開いたドキュメントは最初のコードでは検出されませんが、検出する必要があります。見つからないのはなぜですか?C# から開いたドキュメントが見つかるようにコードを変更するにはどうすればよいですか?

4

1 に答える 1

5

最初のコードでは、開いている Word のインスタンスで開いているドキュメントの一覧を取得します。

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

コードの 2 番目の部分では、WordのNewインスタンスを使用して新しいドキュメントを作成します。

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

そのため、Word の 2 つのインスタンスでファイルを開いて一覧表示することはできません。

最初のメソッドでファイルを取得できるようにする場合は、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);
于 2013-09-19T10:34:51.503 に答える