Следующий код открывает и закрывает документ 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;
}
}
}