unable to cast COM object of type 'microsoft.Office.Interop.Excel.ApplicationClass' to 'microsoft.Office.Interop.Excel.Application'"
这是我第一次尝试在一个C控制台应用程序中从Excel中捕获一些数据。
出现错误"无法将'microsoft.office.interop.excel.applicationclass'类型的COM对象强制转换为'microsoft.office.interop.excel.application'"。
此代码使用了"Microsoft Excel 12.0对象库",我引用了Microsoft.Office.Interop.Excel。
尽管如此,我还是无法克服这个错误——我相信这个错误有它自己的快速解决方案。
我挖掘了一点这个网站,发现了这个解决方案:无法嵌入互操作类型
但是,我无法理解,因此无法实现作为解决方案的建议。
我的.NET版本是4.5。
任何帮助都非常感谢。
事先谢谢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using Excel = Microsoft.Office.Interop.Excel; namespace deneme { class Program { static void Main(string[] args) { Excel.Application xlApp = new Excel.Application(); xlApp.Visible = true; // <-- excel application xlApp.DisplayAlerts = false; // Open the workbook. Excel.Workbook wBook = xlApp.Workbooks.Open("C:\\FNN\\XLA\\fnnComTemplate.xlsx", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); // get the sheet Excel.Worksheet wSheet = wBook.Sheets[0]; // foreach (Excel.Worksheet sheet in wBook.Sheets) { if (sheet.Name =="templateSheet") { wSheet = sheet; } } Excel.Range rng = wSheet.get_Range("A1"); aux = wSheet.Range["F6"].Value; Console.WriteLine("interop result:" + aux); Console.ReadLine(); } } } |
如果这不是与代码相关的错误,请从注册表中删除下面给定的项。
步骤:
开始——>运行——>regedit——>hkey_classes_root——>typelib——>00020813-0000-0000-C000-0000000000 46——>1.8/1.7(删除此项)
解决方案:可以通过删除更高版本的Office中的无效注册表项来解决此问题。按照上述步骤操作。
原因:如果您已将Microsoft Office版本从Office 2010降级为Office 2007,或将Office 2013降级为Office 2010或2007,则此问题是由剩余注册表项引起的。
如果这个解决方案对您没有帮助,请告诉我
Microsoft Office 365
我运行的是Microsoft Office 365和Windows 10,并尝试了上述解决方案以删除注册表项,但没有成功。
我去了控制面板试图修复Office365套件。
我选择了快速修复
再次尝试我的程序,一切正常!
我确信这个问题(以及类似的问题)的答案是正确的,建议编辑注册表并删除不再在计算机上的Office版本的旧引用。
我添加这个答案只是因为我现在在踢自己。花了两个小时在登记处寻找钥匙却一无所获。最后一次冒险是尝试在Microsoft Office上进行简单的修复,突然我的错误消失了。
…在我看来,在手动编辑注册表之前尝试修复是值得的。
在登记处有1.7和1.8。通过删除解决:
1 | HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}\1.8 |
一台计算机已更新到Office2016 64位,当从32位应用程序调用时,COM接口抛出异常。它没有像jayesh答案中那样的旧类型库条目。
将ProcessMonitor跟踪与使用Office 2016的工作计算机进行比较,结果发现
HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{00024..
工作机器将检查不存在的注册表项并返回
NAME NOT FOUND
失败的机器拥有注册表项,但不久之后就会抛出异常。
重复删除注册表项、重新运行跟踪、删除下一个失败的项后,COM接口功能恢复。
使用完全相同的代码,我在一台笔记本电脑上遇到了同样的问题,而在另一台电脑上一切正常。我尝试了各种各样的解决方案,这些解决方案在互联网上随处可见,但最终奏效的是,明确定义了使用非32位版本的库。为了在Visual Studio中这样做,我必须勾选然后取消勾选项目配置的构建部分中的"首选32位"框,该部分在.csproj文件中添加了