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

yeotifhr  于 2023-06-07  发布在  其他
关注(0)|答案(9)|浏览(997)

我试图从C#控制台应用程序中从Excel捕获一些数据。
我得到错误
无法将类型为“microsoft.Office.Interop.Excel.ApplicationClass”的COM对象强制转换为“microsoft.Office.Interop.Excel.Application”
这段代码使用了'MicrosoftExcel12.0对象库',我还引用了'Microsoft.Office.Interop.Excel'。
我稍微挖掘了一下这个网站,发现了 Interop type cannot be embedded,但我无法理解它,无法实现所建议的解决方案。
我的.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();

    }

}
}
zfycwa2u

zfycwa2u1#

适用于Windows 10中的Microsoft Office 365

我在Windows 10中运行Microsoft Office 365,并尝试了上述解决方案来删除注册表项,但没有成功。
我去了设置->应用程序,试图修复Office 365套件:

要到达那里,您可以按照以下步骤操作:
1.开放式启动
1.选择设置
1.选择应用程序
1.在默认页面“应用程序和功能”中,搜索Microsoft 365
1.选择“Microsoft 365”
1.选择“修改”
我选择了快速修复选项:

这为我解决了这个问题。

fhg3lkii

fhg3lkii2#

如果这不是与代码相关的错误,请删除下面列出的注册表项。此问题是由Office的更高版本遗留的密钥引起的。
步骤:
1.转到开始
1.选择运行
1.输入regedit并按Enter
1.导航到HKEY_CLASSES_ROOT -> TypeLib -> {00020813-0000-0000-C 000 - 00000000046} -> 1.9/1.8/1.7
1.删除注册表项

xmakbtuz

xmakbtuz3#

一个简单的Microsoft Office**修复为我解决了这个问题。

zvms9eto

zvms9eto4#

一台机器已更新到Office 2016 64位,当从32位应用程序调用时,COM接口引发异常。它没有像Jayesh的答案中那样的旧TypeLib条目。
将ProcessMonitor跟踪与Office 2016的工作计算机进行比较,导致在
HKEY_CLASSES_ROOT\Wow6432Node\TypeLib{00024..
工作机器将检查不存在的注册表项并返回
未找到名称
发生故障的机器具有注册表项,但随后不久就会抛出异常。
在反复删除注册表项、重新运行跟踪、删除下一个失败项之后,COM接口功能恢复。

a0x5cqrl

a0x5cqrl5#

使用完全相同的代码,我得到了同样的问题,在一台笔记本电脑时,一切都工作正常的另一个。我尝试了各种解决方案,发现在这里和那里在互联网上,但最终工作,是明确定义使用非32位版本的库。为了在visual studio中执行此操作,我必须在项目配置的构建部分中勾选然后取消勾选“Prefer 32-bit”框,这将在.csproj文件中添加<Prefer32Bit>false</Prefer32Bit>

rpppsulh

rpppsulh6#

我的设置:Visual Studio:2019年,办公室:2019 x64,目标框架:net5.0-windows
没有什么能帮助我避免错误:
无法将类型为“System.__ComObject”的COM对象强制转换为接口类型“Microsoft.Office.Interop.Excel. Application”。此操作失败,因为对IID为“{000208 D5 -0000-0000-C 000 - 00000000046}”的接口的COM组件的QueryInterface调用失败,原因是以下错误:加载类型库/DLL时出错。(0x80029C4A(TYPE_E_CANTLOADLIBRARY))。
因此,我通过Sysinternals进程监视器在Win32注册表中找到了Excel.exe的丢失文件路径,并将其更改为现有的x64版本:

[HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}\1.9\0\win32]
@="C:\\Program Files\\Microsoft Office\\Root\\Office16\\EXCEL.EXE"
zvms9eto

zvms9eto7#

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

nx7onnlm

nx7onnlm8#

在我的例子中,我删除regedit:
HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}
删除1.9

问题就解决了

tcbh2hod

tcbh2hod9#

开始->运行->注册表编辑器找到这个路径HKEY_CLASSES_ROOT\TypeLib{00020813-0000-0000-C 000 - 0000000046}并删除它并修复您的Office数据包

相关问题