我有一个正常工作的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的错误版本。
我的版本号:
我尝试过的参考文献
所有这三个引用都给了我同样的例外。有什么想法如何加载吗?
答案 0 :(得分:1)
问题出在不同版本的Office中的typelib注册。我最终删除了不再安装的所有Office版本的注册表项。
这些链接为我提供了使其正常工作所需的信息。
答案 1 :(得分:0)
您是否尝试过将“ Microsoft.Office.Interop.Excel.Application”更改为动态?这应该可以解决您的库版本问题。但是,您将失去该对象的智能感知能力。首先要进行淘汰的过程。
答案 2 :(得分:0)
由于我从32位版本的Office升级到64位版本,因此遇到了此错误,从而导致Win32
和Win64
条目同时存在于注册表中。
最适合我的解决方案是从注册表中的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
保留条目的备份。