Ошибка при загрузке Office.dll COMException: «Ошибка загрузки библиотеки типов / DLL» - PullRequest
0 голосов
/ 29 октября 2018

У меня есть работающая библиотека 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)

Все три из этих ссылок дают мне одно и то же исключение. Есть идеи как это загрузить?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Проблема была с регистрацией typelib из другой версии Office. В итоге я удалил записи реестра для всех версий Office, которые больше не были установлены.

Эти ссылки дали мне информацию, необходимую для ее работы.

https://social.msdn.microsoft.com/Forums/vstudio/en-US/ac50fa41-8d47-4fa9-81a3-914f262676af/0x80029c4a-typeecantloadlibrary?forum=vsto

http://kb.palisade.com/index.php?pg=kb.page&id=528

0 голосов
/ 29 октября 2018

Вы пытались изменить "Microsoft.Office.Interop.Excel.Application" на динамический? Это должно обойти вашу проблему с версией библиотеки. Однако вы потеряете intellisense для объекта. Во-первых, просто попытайтесь устранить.

...