Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';是否设置从Excel互操作强制转换对象?_C#_Excel_Interop_.net 2.0 - Fatal编程技术网

C# 为什么可以';是否设置从Excel互操作强制转换对象?

C# 为什么可以';是否设置从Excel互操作强制转换对象?,c#,excel,interop,.net-2.0,C#,Excel,Interop,.net 2.0,尝试获取对工作表的引用(使用Excel互操作): 错误是它无法强制转换它: 无法将“System.\u ComObject”类型的COM对象强制转换为接口类型“Microsoft.Office.Interop.Excel.Worksheets”。此操作失败,因为对IID为“{000208B1-0000-0000-C000-0000000000 46}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(来自HRESULT的异常:0x80004002(E_NOI

尝试获取对工作表的引用(使用Excel互操作):

错误是它无法强制转换它:

无法将“System.\u ComObject”类型的COM对象强制转换为接口类型“Microsoft.Office.Interop.Excel.Worksheets”。此操作失败,因为对IID为“{000208B1-0000-0000-C000-0000000000 46}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(来自HRESULT的异常:0x80004002(E_NOINTERFACE))


我的cast不正确吗?

如果您使用的是Excel 2007+,我建议使用System.IO.Packaging+System.Xml.Linq(Linq-to-Xml)来处理Excel工作表。它更干净,不需要在运行应用程序的机器上安装excel

您还将遇到较少的COM冲突(如您的帖子中所述)

如果您试图编辑Excel 2003或更早版本,那么很遗憾,我无法帮助您。

奇怪的一个。根据,它应该是
Sheets
类型,而不是
Worksheets
。尚未测试-试一试?

根据,
工作簿。工作表
返回
Microsoft.Office.Interop.Excel.Sheets

所以你会这样投:

Microsoft.Office.Interop.Excel.Sheets sheets = 
    (Microsoft.Office.Interop.Excel.Sheets)xlWorkBook.Worksheets
或者假设
Excel
映射到
Microsoft.Office.Interop.Excel
(如您的问题所示)


是的,你的演员阵容错了

\u Workbook.Sheets
提供了一个实例。该界面提供所有类型的工作表,而不仅仅是工作表;主要包括图表、宏表等

另一方面,界面只提供工作表,而不是图表

接口不可相互分配;因此,您会得到COM错误。这很让人困惑——我甚至不确定是否有可能通过PIA获得
工作表
界面的实例——但这就是Office Interop for ya


只要使用
\u工作簿.Worksheets
属性而不是
\u工作簿.Sheets
属性,您应该获得一个只返回
工作表
对象的
工作表实例,尽管该接口能够提供其他类型的工作表。

如果它在一种环境下工作,但在另一种环境下不工作,请检查HK Classes Root/TypeLib reg键

有可能你正试图竞选总统 HKCR\TypeLib{00020813-0000-0000-C000-0000000000 46}\1.6 但是用户安装的东西添加了密钥: HKCR\TypeLib{00020813-0000-0000-C000-0000000000 46}\1.7 导致互操作调用引发异常

或者,如果不是这样,可能是GAC中的某些东西,因为不同的操作系统版本


我在运行Windows 7的开发人员机器上遇到了这个问题,并在运行XP的用户机器上导致了这个错误。

这可能是在升级到最新的Office版本之后发生的。尝试转到程序和功能,查找安装并“修复”它。显然,它更新和/或重新注册了用于创建这些对象的互操作dll


这可能需要结合@codesforcoffee所描述的注册表修复来完成。

这个问题被标记为
.net-2.0
,这意味着他不能使用Linq to XML或任何打包类。即使他可以,这仍然不能回答这个问题。@Zach&@Joel也是对的,但你是第一个到达出发门的人,绿色检查。尽管这是一个很好的记录,但这可能是一个值得回答的问题/答案。谢谢你。对我来说,问题是
Excel.Workbook.Worksheets
返回的是
Excel.Sheets
对象,而不是
Excel.Worksheets
对象。
Microsoft.Office.Interop.Excel.Sheets sheets = 
    (Microsoft.Office.Interop.Excel.Sheets)xlWorkBook.Worksheets
Excel.Sheets sheets = (Excel.Sheets)xlWorkBook.Worksheets