В настоящее время я работаю над небольшим консольным приложением, которое должно иметь некоторую интеграцию с Microsoft Word. Я предполагаю, что у пользователей могут быть разные версии Microsoft Office, и поэтому я решил загружать сборки взаимодействия во время выполнения (однако я не уверен, что это правильное решение).
Следующий код выдает исключение System.ArgumentNullException Value cannot be null. Arg_ParamName_Name
. Насколько я понимаю, проблема в том, что WordInterop.GetType("Application")
возвращает ноль, однако я не понимаю, почему.
class Program
{
static void Main(string[] args)
{
Assembly WordInterop = Assembly.LoadFrom("C:\\Windows\\assembly\\GAC_MSIL\\Microsoft.Office.Interop.Word\\15.0.0.0__71e9bce111e9429c\\Microsoft.Office.Interop.Word.dll");
Assembly Office = Assembly.LoadFrom("C:\\Windows\\assembly\\GAC_MSIL\\office\\15.0.0.0__71e9bce111e9429c\\OFFICE.DLL");
Type WordApp = WordInterop.GetType("Application");
dynamic wordAppInst = Activator.CreateInstance(WordApp);
wordAppInst.Visible = true;
}
}
Следующее должно работать:
var wordAppType = Type.GetTypeFromProgID("Word.Application")
var wordAppInst = Activator.CreateInstance(wordAppType);
Как я понял, проблема была в имени типа.
Должно быть Microsoft.Office.Interop.Word.ApplicationClass
вместо Application
.
Если вам нужно просто открыть *.doc || *.docx файлы из приложения, вы можете использовать:
System.Diagnostics.Process.Start(@"PATH_TO_FILE");