2010-02-03 12 views
7

COM interop DLL을 참조하는 어셈블리를 작성합니다. 참조의 속성 (VS2010)에서 Interop Types를 True로 설정하여 COM interop 유형을 임베드하면 런타임에 "object에 get_Range에 대한 정의가 없습니다"라는 오류가 발생합니다. COM interop 형식이 포함되지 않으면 오류가 발생하지 않습니다.interop 어셈블리가 .NET 4.0에 포함되어 있으면 Excel get_Range가 누락됩니다.

특정 방법 인 Worksheet.get_Range를 생략해야하는 이유나이 문제를 해결하는 방법이나 다른 관련 통계를 얻는 방법을 알고있는 사람이 있습니까? 어떤 도움을 주셔서 감사합니다.

interop dll에는 Worksheet.get_Range (object, [object])에 대한 참조가 포함되어 있습니다. 내 호출 어셈블리에서 반사판을 사용하면 워크 시트 아래에 get_Range에 대한 언급이 없습니다.

임베딩되는 interop 어셈블리는 Excel9.olb에서 생성됩니다. 응용 프로그램이 여러 Excel 버전을 대상으로하므로 PIA를 사용하지 않습니다.

답변

10

나는 아직 내 자신을 시도하지 않았지만 C# 4.0에서 임베디드 COM Interop 유형을 "C# friendly"구문으로 사용할 때 구문이 변경되었다고 생각합니다.

따라서 get_Range(object, [object]) 메서드를 찾는 대신 Type.Missing을 제공하는 대신 선택적 매개 변수를 생략하거나 get 접근자를 완전히 호출하지 않고 대신 대괄호를 사용하여 속성 이름을 참조 할 수 있습니다.

// Using C# 3.0: 
Excel.Range range = worksheet.get_Range("A1", Type.Missing); 

// Using C# 4.0, omitting the optional parameter: 
Excel.Range range = worksheet.get_Range("A1"); 

// Using C# 4.0, utilizing square-bracket indexing: 
Excel.Range range = worksheet.Range["A1"]; 

내가 이해하지만, 여전히 새로운 인덱서 구문은 정말 배후에 필요한 '수'와 '설정'접근을 호출하는 "옛날 방식"을 호출 할 수 있어야에서 , 그래서 나는 왜 당신이 문제를 겪고 있는지 정말로 모른다. 내 생각 엔 인텔리 센스 목록에 Worksheet.get_Range 대신 Worksheet.Range이 필요합니다. 이 방법으로 문제가 해결되지 않으면 설치 나 설치에 문제가있는 것 같습니다.

자세한 내용은 Indexed Properties in C# 4.0 by Kirill Osenkov. 이 도움이

희망 ...

마이크

+0

마이크, 도움 주셔서 감사합니다. 단일 매개 변수 접근 방식은 런타임 오류를 가져 오지 않으며 분명히 좋은 해결 방법입니다. Microsoft 530769에 버그 보고서를 제출했습니다. – mikemay

+1

https://connect.microsoft.com/VisualStudio/feedback/details/530769/get-range-method-missing-with-embedded-interop-assembly?wa=wsignin1.0 – mikemay

+0

아, 맞아, 나는 이전의 코멘트에 나쁜 링크를 게시했다. 고쳐 주셔서 감사합니다. 토론은 매우 흥미롭고 합리적입니다. 하지만, 이전의'worksheet.get_Range ("A1", Type.Missing) 대신에 단순히'worksheet.Range [ "A1"]'문법을 사용하는 것이 가장 쉬운 해결책은 아닌지 묻고 싶습니다. C# 4.0 사용 하시겠습니까? 매우 흥미로운 호기심을 발견했지만 자신의 코드에 맞게 수정하는 것이 가장 쉽고 새로운 구문을 사용하는 것이 가장 좋을 것입니다 - 어떤 경우에도 읽기 쉽도록 디자인되어 있습니다! –

관련 문제