为什么无法从 Excel 互操作中设置强制转换对象?

2024-01-13

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

Excel.Application xl = new Excel.ApplicationClass();
Excel.Workbooks xlWorkBooks = xl.Workbooks;
Excel.Workbook xlWorkBook = xlWorkBooks.Open(fileName, 0, false, 5, "", 
                      "", true, Excel.XlPlatform.xlWindows, "\t",
                      false, false, 0, true, 1, 0);

// Next line crashes
Excel.Worksheets xlWorkSheets = (Excel.Worksheets) xlWorkBook.Worksheets; 

错误是它无法投射它:

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

我的演员阵容不正确吗?


是的,你的演员阵容有误。

_Workbook.Sheets给你一个Sheets http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.sheets%28office.11%29.aspx实例。该界面为您提供所有类型的工作表,而不仅仅是工作表;主要包括图表、宏观表等。

另一方面,工作表 http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.worksheets%28v=office.11%29.aspx界面只为您提供工作表,而不是图表。

接口之间不可互相分配;因此,您会收到 COM 错误。这很令人困惑 - 我什至不确定是否可以获得一个实例Worksheets通过 PIA 进行界面 - 但这就是 Office Interop。

只要您使用_Workbook.Worksheets属性而不是_Workbook.Sheets属性,你应该得到一个实例Sheets只返回Worksheet对象 - 尽管事实上接口是capable提供其他类型的床单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么无法从 Excel 互操作中设置强制转换对象? 的相关文章

随机推荐