Меню Word застряли после закрытия документа с помощью COM - PullRequest
0 голосов
/ 21 сентября 2010

Следующий код открывает и закрывает документ Word с помощью COM;это не выдает никаких ошибок.

Однако, если до запуска код Word был развернут, меню Word не реагируют на действия мыши или клавиатуры после запуска программы.

public static void Main(string[] args)
{
    try
    {
        var wordDocument = GetWordDocumentName();
        var wordApplication = GetWordApplication();

        // Open the document.
        wordApplication.Documents.Open((object)wordDocument);

        // This is what causes the problem.
        // Close the document.
        wordApplication.ActiveDocument.Close();

        Console.WriteLine("Can you use Word menus or ribbon?");
    }
    catch (Exception ex)
    {
        WriteException(ex);
    }

    Console.WriteLine();
    Console.WriteLine("Press any key to continue...");
    Console.ReadKey();
}

Существует два способа работывокруг этой ошибки.

  • Убедитесь, что слово не развернуто до запуска кода.
  • Выберите другое приложение и вернитесь к Word.

На сегодняшний деньМне удалось воспроизвести проблему в следующих средах:

  • Windows 7 и Word 2003
  • Windows 7 & Word 2007
  • Windows Vista и Word 2003

Проблема не существует в Windows Server 2008 с Word 2003.

Весь код выглядит следующим образом:

namespace WordMenuSharp
{
    using System;
    using System.IO;
    using Microsoft.VisualBasic;

    public class Program
    {
        public static void Main(string[] args)
        {
            try
            {
                var wordDocument = GetWordDocumentName();
                var wordApplication = GetWordApplication();

                // Open the document.
                wordApplication.Documents.Open((object)wordDocument);

                // This is what causes the problem.
                // Close the document.
                wordApplication.ActiveDocument.Close();

                Console.WriteLine("Can you use Word menus or ribbon?");
            }
            catch (Exception ex)
            {
                WriteException(ex);
            }

            Console.WriteLine();
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }

        private static string GetWordDocumentName()
        {
            var fileName = Path.Combine(
                Directory.GetCurrentDirectory(),
                "WordMenuTest.doc"
            );

            if (!File.Exists(fileName))
            {
                throw new FileNotFoundException(
                    fileName + " must be created."
                );
            }

            return fileName;
        }

        private static 
            Microsoft.Office.Interop.Word.Application GetWordApplication()
            {
                Microsoft.Office.Interop.Word.Application wordApplication;

                try
                {
                    wordApplication = 
                        (Microsoft.Office.Interop.Word.Application)Interaction
                            .GetObject(null, "Word.Application");
                }
                catch (Exception ex)
                {
                    throw new Exception(
                        "Error while getting Word, have you opened it." +  
                        Environment.NewLine + 
                        ex.Message, 
                        ex
                    );
                }

                if (wordApplication.Documents.Count == 0)
                {
                    throw new Exception(
                        "A file must already be open in Word."
                    );
                }

                return wordApplication;
            }

        private static void WriteException(Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine();
            Console.WriteLine(ex.Message);
            Console.ForegroundColor = ConsoleColor.White;
        }
    }
}

1 Ответ

0 голосов
/ 17 октября 2010

Похоже, вы, возможно, нашли (еще одну) ошибку в Word.

Пробовали ли вы что-то вроде свертывания, а затем повторной развертки объекта Word Application после закрытия активного документа?также попробуйте установить значение Visible = false, затем Visible = true.

Вы можете получить экранную вспышку, но это также может исправить ленту / и т.д.

...