Этот код используется для получения пользовательских свойств документа для книги Excel.Как получить CustomDocumentProperties с помощью Excel Interop?
var xlApp = Globals.ThisAddIn.Application; // This works in VSTO Excel Add-in
var xlApp = new global::Microsoft.Office.Interop.Excel.Application(); // This doesn't work anywhere
xlApp.Visible = true;
global::Microsoft.Office.Interop.Excel.Workbook workbook = xlApp.Workbooks.Open(file, false, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, false, Type.Missing, Type.Missing);
global::Microsoft.Office.Core.DocumentProperties properties = workbook.CustomDocumentProperties; // Exception occurs here
global::Microsoft.Office.Core.DocumentProperty property = properties["propertyname"];
Первые 2 строки являются ссылками на Excel Application
. Получайте ссылку из внутренних надстроек VSTO, другая - new Application()
.
При использовании Application
от внутренних компонентов VSTO код запускает штрафы без проблем. Но при использовании new Application()
, то workbook.CustomDocumentProperties
линия бросает InvalidCastException
:
Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Core.DocumentProperties'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{2DF8D04D-5BFA-101B-BDE5-00AA0044DE52}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
Я пытаюсь сделать его работу над проектом C# WinForms без VSTO. Множество примеров и руководств используют new Application()
для взаимодействия с Excel, но я заметил, что Microsoft.Office.Interop.Excel.Application
- это интерфейс, поэтому использование интерфейса new
на самом деле странно для меня. Как я могу создать соответствующее приложение, которое может получить CustomDocumentProperties
?
Эталонные Сборки Я использую:
- Microsoft.Office.Interop.Excel v2.0.50727 Версия 14.0.0.0
- Microsoft.CSharp v4.0.30319 Версия 4.0.0.0
Изменение как 'DocumentProperties', так и' DocumentProperty' для динамической работы на самом деле! Но не уверен, что полагаться на «динамику» - хорошая практика? Нет ли способа обеспечить правильный тип кода, с которым приходится сталкиваться, чтобы предотвратить дальнейшие возможные проблемы времени выполнения? – Jake
Не так далеко, насколько я знаю. На самом деле многие классы взаимодействия используют 'dynamic' именно по этой причине. –