Microsoft.office.interop.word.documents获取的打开文档列表不完整

问题描述

我在工作中使用互操作单词,在开始主要操作之前,我需要关闭几个单词文件,这是因为我需要将它们与服务器上的副本进行比较,并在需要时进行更新。要检查文件是否打开,我使用Marshal.GetActiveObject将应用程序附加到word,然后关闭文件而不保存。当文件一个一个地打开时,这工作正常。如果一次打开多个文件,即在Windows资源管理器中选择它们并按回车键,则会出现错误。我已经将这些错误跟踪到Word.Documents界面无法正确获取文档列表

在我的示例中,文件夹中有4个文档。如果我一一打开它们,下面的代码将返回4,但是如果我在文件夹中选择3或4个文件并单击return,它们将全部打开,但是代码将返回2。这有什么用?我该如何解决

using System;
using System.Linq;
using System.Reflection;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Word = Microsoft.Office.Interop.Word;

namespace TestAppForStackOverflow
{
    class Program
    {
        static void Main(string[] args)
        {
            object misValue = Missing.Value;
            object doNotSave = Word.WdSaveOptions.wdDoNotSaveChanges;
            Word.Application wordApp;

            bool isWordOpen = Process.GetProcessesByName("winword").Any();
            if (isWordOpen)
            {
                try { wordApp = (Word.Application)Marshal.GetActiveObject("Word.Application"); }
                catch (COMException) { wordApp = new Word.Application(); }
                Word.Documents documents = wordApp.Documents;
                Console.WriteLine("Number of word documents open: " + documents.Count.ToString());
            }
            else { wordApp = new Word.Application(); }
            
            string q = Console.ReadLine();
            if (q == "q") wordApp.Quit(ref doNotSave,ref misValue,ref misValue);
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)