加载Office.dll COMException时出错:“错误加载类型库/ DLL”

时间:2018-10-29 15:06:28

标签: c# excel visual-studio com office-interop

我有一个正常工作的Excel COM库,我正在尝试使用以下方法确定excel是否处于编辑模式

public bool IsEditMode(Microsoft.Office.Interop.Excel.Application xlApp)
    {
        //https://stackoverflow.com/questions/464196/workaround-to-see-if-excel-is-in-cell-edit-mode-in-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版本错误。它的目标是错误的Office版本或Visual Studio的错误版本。

我的版本号:

  • VS 2017社区(15.8.6)
  • Excel 2010 Office Standard 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 Tools for Office \ PIA \ Office14 \ office.dll
  • VS参考管理器-> COM-> Microsoft Office 14.0对象库。 (C:\ WINDOWS \ assembly \ GAC_MSIL \ Office \ 15.0.0.0__71e9bce111e9429c \ Office.dll)

所有这三个引用都给了我同样的例外。有什么想法如何加载吗?

3 个答案:

答案 0 :(得分:1)

问题出在不同版本的Office中的typelib注册。我最终删除了不再安装的所有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

答案 1 :(得分:0)

您是否尝试过将“ Microsoft.Office.Interop.Excel.Application”更改为动态?这应该可以解决您的库版本问题。但是,您将失去该对象的智能感知能力。首先要进行淘汰的过程。

答案 2 :(得分:0)

由于我从32位版本的Office升级到64位版本,因此遇到了此错误,从而导致Win32Win64条目同时存在于注册表中。

最适合我的解决方案是从注册表中的Win32条目中删除

Computer\HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}\1.9\0

因为Data指的是无效路径

C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE

注意:为了避免出现问题,请通过Export保留条目的备份。