.net 无法强制转换类型为';系统。共对象';至接口类型';Microsoft.Office.Interop.Excel.Worksheets';
我正在编写一个利用Microsoft.Office.Interop.Excel程序集的类。它是“一站式”DLL库的一部分,将在java解决方案中使用(以限制java端的接口数量) 我得到以下错误: 其他信息:无法将“System.\u ComObject”类型的COM对象强制转换为接口类型“Microsoft.Office.Interop.Excel.Worksheets”。此操作失败,因为对IID为“{000208B1-0000-0000-C000-0000000000 46}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(来自HRESULT的异常:0x80004002(E_NOINTERFACE)) 这是由以下代码引发的:.net 无法强制转换类型为';系统。共对象';至接口类型';Microsoft.Office.Interop.Excel.Worksheets';,.net,excel,vb.net,excel-interop,.net,Excel,Vb.net,Excel Interop,我正在编写一个利用Microsoft.Office.Interop.Excel程序集的类。它是“一站式”DLL库的一部分,将在java解决方案中使用(以限制java端的接口数量) 我得到以下错误: 其他信息:无法将“System.\u ComObject”类型的COM对象强制转换为接口类型“Microsoft.Office.Interop.Excel.Worksheets”。此操作失败,因为对IID为“{000208B1-0000-0000-C000-0000000000 46}”的接口的COM
Public Class XL
Public XL As Excel.Application = Nothing
Public XLN As String
Public WBS As Excel.Workbooks = Nothing
Public WBSN() As String
Public WB As Excel._Workbook = Nothing
Public WBN As String
Public WSS As Excel.Worksheets = Nothing
Public WSSN() As String
Public WS As Excel._Worksheet = Nothing
Public WSN As String
Public XLCelllValue As Object = Nothing
Public Sub New()
XL = New Excel.Application()
XL.Visible = True
WBS = XL.Workbooks
WB = WBS.Add()
WSS = WB.Worksheets '<this is the line that throws the exception
WS = WSS(1)
End Sub
End Class
公共类XL
Public XL作为Excel.Application=Nothing
公共XLN作为字符串
将WBS作为Excel公开。工作簿=无
作为字符串的公共WBSN()
将WB作为Excel公开。\u工作簿=无
公共WBN作为字符串
公共WSS作为Excel。工作表=无
作为字符串的公共WSSN()
将WS作为Excel公开。\u工作表=无
公共无线传感器网络作为字符串
Public XLCelllValue作为对象=无
公共分新()
XL=新的Excel.Application()
四十、 可见=真
WBS=XL.工作手册
WB=WBS.Add()
WSS=WB.Worksheets'这是一种类型混淆
WB.工作表
返回工作表的集合
所以你需要
Dim WSS As Excel.Sheets = Nothing
使用以下实例:
“图纸”集合可以包含图表或工作表对象。如果要返回任何类型的图纸,“图纸”集合非常有用。如果只需要使用一种类型的图纸,请参见该图纸类型的对象主题
考虑到这一点,更改以下声明:
Public WSS As Excel.Worksheets = Nothing
致:
此外,我还注意到,您正在使用和,并且没有访问成员的权限
您应该考虑使用<代码> >工作手册继承,它继承自<代码>工作表< /代码>。
工作表
和工作簿
都继承自DocEvents\u Event
,您可以访问以下成员:
只有当您想使用处理程序但认为值得注意时,这才有意义
最后,在一个小音符上,你应该打开。这将帮助您编写更好的代码,并在编译时生成潜在的运行时错误。目前,这种带有选项Strict On的代码将创建以下编译错误:
Option Strict On不允许从“Object”隐式转换为“Microsoft.Office.Interop.Excel.Worksheet”
编译器通常会建议修复,在这种情况下,修复将是:
WS = CType(WSS(1), Excel.Worksheet)
在您的情况下,这可能不会产生运行时错误,但是通过对选项进行严格限制,您可以省去很多痛苦。作为我遇到的答案的补充,这可能对您有用。很好。回答得很好@Jink88909
WS = CType(WSS(1), Excel.Worksheet)