C# 无法强制转换类型为';microsoft.Office.Interop.Excel.ApplicationClass';至';microsoft.Office.Interop.Excel.Application'&引用;

C# 无法强制转换类型为';microsoft.Office.Interop.Excel.ApplicationClass';至';microsoft.Office.Interop.Excel.Application'&引用;,c#,excel,com-interop,C#,Excel,Com Interop,这是我第一次尝试从一个C#控制台应用程序中从excel中捕获一些数据 我收到错误“无法将“microsoft.Office.Interop.Excel.ApplicationClass”类型的COM对象强制转换为“microsoft.Office.Interop.Excel.Application” 这段代码使用了“Microsoft Excel 12.0对象库”,我引用了Microsoft.Office.Interop.Excel 尽管如此,我还是无法克服这个错误——我相信它有自己的快速解决方

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

我收到错误“无法将“microsoft.Office.Interop.Excel.ApplicationClass”类型的COM对象强制转换为“microsoft.Office.Interop.Excel.Application”

这段代码使用了“Microsoft Excel 12.0对象库”,我引用了Microsoft.Office.Interop.Excel

尽管如此,我还是无法克服这个错误——我相信它有自己的快速解决方案

我在这个网站上翻了一番,发现了这个解决方案:

然而,我无法理解,因此无法实施所建议的解决方案

我的.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();

    }

}
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用Excel=Microsoft.Office.Interop.Excel;
名称空间deneme
{
班级计划
{
静态void Main(字符串[]参数)
{
Excel.Application xlApp=新的Excel.Application();

xlApp.Visible=true;//如果这不是代码相关错误,请从注册表中删除以下给定项

步骤:

开始-->运行-->regedit-->HKEY_CLASSES_ROOT-->类型库-->{00020813-0000-0000-C000-0000000000 46}-->1.8/1.7(删除此项)

解决方案: 此问题可以通过删除更高版本Office遗留的无效注册表项来解决。请按照上述步骤操作

原因: 如果您已将Microsoft Office版本从Office 2010降级到Office 2007,或从Office 2013降级到Office 2010或2007,则此问题是由遗留的注册表项引起的


如果此解决方案对您没有帮助,请告诉我。

一台计算机已更新为Office 2016 64位,从32位应用程序调用COM接口时引发异常。它没有像Jayesh回答中那样的旧TypeLib条目

将ProcessMonitor跟踪与Office 2016的工作机器进行比较,会导致在中出现类似死端注册表项的情况

HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{00024

工作机器将检查不存在的注册表项并返回

找不到名称

出现故障的机器拥有注册表项,但随后不久将抛出异常


在反复删除注册表项、重新运行跟踪、删除下一个失败的项后,COM接口功能恢复。

我确信此问题(以及类似问题)的答案是正确的建议编辑注册表并删除对不再在计算机上的Office版本的旧引用是正确的

我之所以添加这个答案,是因为我现在正在自责。花了两个小时在注册表中寻找密钥,结果一无所获。最后一次尝试是在Microsoft Office上进行一次简单的修复,突然我的错误消失了


…在我看来,在深入手动编辑注册表之前尝试修复是值得的。

注册表中同时包含1.7和1.8。 通过删除以下内容解决:

HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}\1.8
微软Office 365 我在Windows 10上运行Microsoft Office 365,并尝试使用上述解决方案删除注册表项,但未成功

我去了控制面板,试图修复Office 365套件。

  • 右键单击“开始”菜单
  • 单击应用程序和功能
  • 搜索Microsoft 365
  • 单击Microsoft 365
  • 单击“修改”
  • 我选择了快速修复


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

    使用完全相同的代码,我在一台笔记本电脑上遇到了同样的问题,而在另一台笔记本电脑上一切正常。我尝试了互联网上到处都能找到的各种解决方案,但最终成功的是明确定义了使用非32位版本的库。在visual s中这样做tudio,我必须勾选并取消勾选项目配置构建部分中的“首选32位”框,该框在.csproj文件中添加了
    false

    Windows7x64/ Office 365(16.0.x)32位/ VS 2019

    已检查注册表->HKEY_类\u根->类型库,查找{00020813-0000-0000-C000-0000000000 46}仅存在一条记录“1.9”,无其他记录

    通过过程监视器检查问题检测查找和读取
    vbe6ext.olb
    时可能出现的问题(许多结果显示“未找到名称”)

    在问题解决后,从进行“快速修复”

    p.S>是由Process Monitor检查“后处理”的-现在文件
    VBE6EXT.OLB
    是从
    C:\Program Files(x86)\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\VBA\VBA6\
    中通过第一次探测获取的。

    我在以下内容中删除regedit:

    HKEY\u CLASSES\u ROOT\TypeLib\{00020813-0000-0000-C000-0000000000 46}

    删除1.9


    问题解决了。

    维修办公室不为我工作。我做了全面维修,但问题仍然存在

    这对我很有用:

    开始-->运行-->regedit-->HKEY_类根-->类型库-->{00020813-0000-0000-C000-0000000000 46}-->1.8/1.7(删除整个节点)

    当您从Visual Studio调用Interop应用程序时,Office将自动修复

    我的情况是我安装了Office 2016,但只是试用版。 我将其移除,然后切换回Office 2013

    此后,出现了这个问题。
    删除密钥后,Office 2013自动修复,解决了我的问题。

    我在PowerShell中遇到此问题。除了上述问题,$xlApp.Workbooks为我返回null。以32位模式运行PowerShell脚本解决了我的问题。

    无论出于何种原因,我的脚本有一天停止工作

    运行动力直升机