无法将“microsoft.Office.Interop.Excel.ApplicationClass”types的COM对象转换为“microsoft.Office.Interop.Excel.Application”

这是我第一次尝试从一个C#控制台应用程序中从Excel中捕获一些数据。

我得到错误“无法将types为”microsoft.Office.Interop.Excel.ApplicationClass“的COM对象转换为”microsoft.Office.Interop.Excel.Application“。

这段代码使用了“Microsoft Excel 12.0 Object Library”,并且引用了Microsoft.Office.Interop.Excel。

不过,我无法克服这个错误 – 我相信它有自己的快速解决scheme。

我挖了一点这个网站,并遇到了这个解决scheme: Interoptypes不能embedded

但是,我不明白,所以不能执行build议的解决scheme。

我的.Net版本是4.5。

很感谢任何forms的帮助。

提前致谢。

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(); } } } 

如果这不是一个代码相关的错误,请从registry中删除以下给定的密钥。

脚步:

开始 – >运行 – > regedit – > HKEY_CLASSES_ROOT – > TypeLib – > {00020813-0000-0000-C000-000000000046} – > 1.8 / 1.7(删除这个)

解决scheme:通过删除Office更高版本中遗留的无效registry项,可以解决此问题。 按照上面的步骤。

原因:如果您已将Microsoft Office的版本从Office 2010降级到Office 2007或从Office 2013降级到Office 2010或2007,则由于遗留registry项导致此问题。

让我知道如果这个解决scheme没有帮助你

我确信这个问题(和类似的问题)的答案是正确的,build议编辑registry并删除对Office版本的旧引用。

我只是添加这个答案,因为我现在踢自己。 花了两个小时在registry中search密钥并且无处可寻。 骰子的最后一滴是在Microsoft Office上尝试一个简单的修复 ,突然间我的错误消失了。

…在我看来,值得深入到手动编辑registry之前,尝试修复。

Microsoft Office 365

我用Windows 10运行Microsoft Office 365,并尝试使用上述解决scheme删除registry项,但未成功。

我去了控制面板,试图修复Office 365套件。 在这里输入图像描述

我select了快速修复 在这里输入图像描述

再次尝试我的程序,一切正常!

一台机器已被更新到Office 2016 64位,COM接口从32位应用程序调用时抛出exception。 它没有像Jayesh的答案那样的旧的TypeLib条目。

将ProcessMonitor跟踪与Office 2016中的工作机器进行比较,导致看起来像死胡同的registry项

HKEY_CLASSES_ROOT \ Wow6432Node \的TypeLib \ {00024 ..

工作机器将检查不存在的registry项并返回

姓名未find

失败的机器有registry键,但随后不久就会抛出exception。

重复删除registry项后,重新运行跟踪,删除下一​​个失败的密钥,COM接口function恢复。

在registry中有1.7和1.8。 通过删除解决:

 HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}\1.8