'System .__ ComObject'유형의 COM 개체를 'Microsoft.Office.Interop.Excel.Worksheets'인터페이스 유형으로 캐스팅 할 수 없습니다.

새해 전날

Microsoft.Office.Interop.Excel 어셈블리를 활용하는 클래스를 작성 중입니다. 이것은 자바 솔루션에서 사용될 "원 스톱 숍"DLL 라이브러리의 일부입니다 (자바 측의 인터페이스 양을 제한하기 위해).

다음과 같은 오류가 발생합니다.

추가 정보 : 'System .__ ComObject'유형의 COM 개체를 'Microsoft.Office.Interop.Excel.Worksheets'인터페이스 유형으로 캐스팅 할 수 없습니다. 다음 오류로 인해 IID가 '{000208B1-0000-0000-C000-000000000046}'인 인터페이스에 대한 COM 구성 요소의 QueryInterface 호출이 실패했기 때문에이 작업이 실패했습니다. 지원되는 인터페이스가 없습니다 (HRESULT에서 예외 : 0x80004002 (E_NOINTERFACE)). .

이것은 다음 코드에 의해 발생합니다.

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

내가 뭘 잘못하고 있는지 잘 모르겠습니다. 모든 속성이 공용으로 선언되고 Worksheets는 유효한 컬렉션이고 WB 속성 유형은 Excel._workbook이고 WSS 속성 유형은 Excel.worksheets입니다.

내가 놓친 아이디어가 있습니까?

버그

사용 시트의 인스턴스를 :

Sheets 컬렉션에는 Chart 또는 Worksheet 개체가 포함될 수 있습니다. Sheets 컬렉션은 모든 유형의 시트를 반환하려는 경우에 유용합니다. 한 가지 유형의 시트로만 작업해야하는 경우 해당 시트 유형에 대한 개체 항목을 참조하십시오.

이를 염두에두고 다음 선언을 변경하십시오.

Public WSS As Excel.Worksheets = Nothing

에:

Public WSS As Excel.Sheets = Nothing

또한 DocEvents_Event 구성원에 대한 액세스 권한이없는 _Workbook_Worksheet사용 하고 있음 을 확인했습니다 .

당신은 사용을 고려해야 통합 문서 에서 상속 _Workbook워크 시트를 하는 상속에서 _Worksheet. 다음 멤버에 대한 액세스 권한을 제공하는 둘 다 WorksheetWorkbook상속 DocEvents_Event:

여기에 이미지 설명 입력

핸들러를 사용하고 싶지만 주목할 가치가 있다고 생각하는 경우에만 중요합니다.

마지막으로 작은 메모에서 Option Strict On을 켜야 합니다. 이렇게하면 더 나은 코드를 작성하고 컴파일 타임에 잠재적 인 런타임 오류를 생성하는 데 도움이됩니다. 이 유형의 코드 WS = WSS(1)는 Option Strict On을 사용하면 다음과 같은 컴파일 오류가 발생합니다.

Option Strict On은 'Object'에서 'Microsoft.Office.Interop.Excel.Worksheet'로의 암시 적 변환을 허용하지 않습니다.

종종 컴파일러는 수정 사항을 제안하며이 경우 수정 사항은 다음과 같습니다.

WS = CType(WSS(1), Excel.Worksheet)

귀하의 경우 이것은 아마도 런타임 오류를 생성하지 않을 것이지만 Option Strict On을 사용하면 많은 슬픔을 줄일 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관