У меня есть работающая библиотека Excel COM, и я пытаюсь использовать следующий метод, чтобы определить, находится ли Excel в режиме редактирования
public bool IsEditMode(Microsoft.Office.Interop.Excel.Application xlApp)
{
///266669/obhodnoi-put-chtoby-videt-nahoditsya-li-excel-v-rezhime-redaktirovaniya-yacheiki-v-net
//xlApp = (Microsoft.Office.Interop.Excel.Application)ExcelDnaUtil.Application;
var bars = xlApp.Application.CommandBars;
var commandBar = bars["Worksheet Menu Bar"];
var menu = commandBar.FindControl(
1, //the type of item to look for
18, //the item to look for
Type.Missing, //the tag property (in this case missing)
Type.Missing, //the visible property (in this case missing)
true);
if (menu != null)
{
// Check if "New" menu item is enabled or not.
if (!menu.Enabled)
{
return true;
}
}
return false;
}
Когда мой код попадает в xlApp.Application.CommandBars; Я получаю следующее исключение.
System.Runtime.InteropServices.COMException: 'Error loading type library/DLL. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))'
Я считаю, что проблема в том, что я ссылаюсь на неправильную версию office.dll. Либо она нацелена не на ту версию офиса или на неправильную версию Visual Studio.
Мои номера версий:
- VS 2017 Сообщество (15.8.6)
- Excel 2010 Office Стандартный 32-разрядный (14.0.7214.5000)
Ссылки, которые я пробовал
- Вручную добавить ссылку на C: \ Windows \ assembly \ GAC_MSIL \ office \ 14.0.0.0__71e9bce111e9429c \ OFFICE.DLL
- Позвольте Visual Studio автоматически добавить ссылку в C: \ Program Files (x86) \ Microsoft Visual Studio \ Shared \ Инструменты Visual Studio для Office \ PIA \ Office14 \ office.dll
- VS Reference Manager -> COM -> Библиотека объектов Microsoft Office 14.0. (C: \ WINDOWS \ сборка \ GAC_MSIL \ Office \ 15.0.0.0__71e9bce111e9429c \ office.dll)
Все три из этих ссылок дают мне одно и то же исключение. Есть идеи как это загрузить?