c# – 为什么不能从Excel互操作设置一个对象?

前端之家收集整理的这篇文章主要介绍了c# – 为什么不能从Excel互操作设置一个对象?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
试图获得工作表的引用(使用Excel interop):
Excel.Application xl = new Excel.ApplicationClass();
Excel.Workbooks xlWorkBooks = xl.Workbooks;
Excel.Workbook xlWorkBook = xlWorkBooks.Open(fileName,false,5,"",true,Excel.XlPlatform.xlWindows,"\t",1,0);

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

错误是它不能转换它:

Unable to cast COM object of type ‘System.__ComObject’ to interface type ‘Microsoft.Office.Interop.Excel.Worksheets’. This operation Failed because the QueryInterface call on the COM component for the interface with IID ‘{000208B1-0000-0000-C000-000000000046}’ Failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

我的演员是不正确的吗?

解决方法

是的,你的演员错了.

_Workbook.Sheets给你一个Sheets实例.此界面为您提供所有类型的工作表,而不仅仅是工作表;主要包括图表,宏图等.

另一方面,Worksheets界面只给你工作表 – 而不是图表.

接口不能彼此分配;因此,您会收到COM错误.这是令人困惑的 – 我甚至不确定是否可以通过PIA获得工作表接口的实例 – 但是这是Office的Interop for ya.

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

猜你在找的C#相关文章