无法将“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。
任何帮助非常感谢。
提前致谢。
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中狩猎的钥匙,并无处可去。 骰子的最后一滴是在Microsoft Office上尝试一个简单的修复 ,突然间我的错误消失了。
…在我看来,值得深入到手动编辑registry之前,尝试修复。
一台机器已被更新到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
Microsoft Office 365
我用Windows 10运行Microsoft Office 365,并尝试使用上述解决scheme删除registry项,但未成功。
我去了控制面板,试图修复Office 365套件。
我select了快速修复
再次尝试我的程序,一切正常!