我试图从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();
}
}
}
9条答案
按热度按时间zfycwa2u1#
适用于Windows 10中的Microsoft Office 365
我在Windows 10中运行Microsoft Office 365,并尝试了上述解决方案来删除注册表项,但没有成功。
我去了设置->应用程序,试图修复Office 365套件:
要到达那里,您可以按照以下步骤操作:
1.开放式启动
1.选择设置
1.选择应用程序
1.在默认页面“应用程序和功能”中,搜索Microsoft 365
1.选择“Microsoft 365”
1.选择“修改”
我选择了快速修复选项:
这为我解决了这个问题。
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.删除注册表项
xmakbtuz3#
一个简单的Microsoft Office**修复为我解决了这个问题。
zvms9eto4#
一台机器已更新到Office 2016 64位,当从32位应用程序调用时,COM接口引发异常。它没有像Jayesh的答案中那样的旧TypeLib条目。
将ProcessMonitor跟踪与Office 2016的工作计算机进行比较,导致在
HKEY_CLASSES_ROOT\Wow6432Node\TypeLib{00024..
工作机器将检查不存在的注册表项并返回
未找到名称
发生故障的机器具有注册表项,但随后不久就会抛出异常。
在反复删除注册表项、重新运行跟踪、删除下一个失败项之后,COM接口功能恢复。
a0x5cqrl5#
使用完全相同的代码,我得到了同样的问题,在一台笔记本电脑时,一切都工作正常的另一个。我尝试了各种解决方案,发现在这里和那里在互联网上,但最终工作,是明确定义使用非32位版本的库。为了在visual studio中执行此操作,我必须在项目配置的构建部分中勾选然后取消勾选“Prefer 32-bit”框,这将在.csproj文件中添加
<Prefer32Bit>false</Prefer32Bit>
。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版本:zvms9eto7#
我在PowerShell中遇到了这个问题。沿着上述问题,
$xlApp.Workbooks
为我返回了null。在32位模式下运行PowerShell脚本解决了我的问题。nx7onnlm8#
在我的例子中,我删除regedit:
HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}
删除1.9
问题就解决了
tcbh2hod9#
开始->运行->注册表编辑器找到这个路径HKEY_CLASSES_ROOT\TypeLib{00020813-0000-0000-C 000 - 0000000046}并删除它并修复您的Office数据包