Range는 실제로 속성이며 인덱서로 작동한다는 점에서 다소 특이한 속성입니다. 즉, 배열이나 사전과 같은 의미를 가짐을 의미합니다. 대부분의 언어에서는 sht.Range["A1"]
에 액세스 할 수 있습니다. 즉 문법 설탕, 그리고 정말로 단지, 즉 다른 방법처럼 액세스 것 :
sht.get_Range("A1",System.Reflection.Missing.Method)
내가 문법 설탕 스타일과 명시 적 메서드 호출을 모두 사용하여, 코드를 반복 우우, 루비와 아이언 루비를 사용하려고했습니다. IronRuby에서 완벽하게 작동하도록 할 수는 있지만 은 32 비트 인터프리터에만 있습니다. 내 구성에있는 32 비트 응용 프로그램 인 일반 Ruby에서도 제대로 작동했습니다. 64 비트 인터프리터에서는 Range 속성이 절대로 올바르게 해석되지 않았습니다.
그래서 나는 Boo Interactive Shell이 64 비트 모드로 실행되고 있고 그로 인해 interop가 실패한 것으로 의심하게되었습니다. 아쉽게도 CORFLAGS.exe를 사용하여 로컬 Boo 바이너리를 32 비트 모드로 실행 한 후에도 동일한 문제가 재현되어 실제 문제는 아닙니다. 일을 무슨 짓을
는하지만, 명시 적으로처럼, 엑셀 후에 .NET Interop를 도서관뿐만 아니라 상호 운용성 서비스 네임 스페이스를 가져이었다
import Microsoft.Office.Interop.Excel
import System.Runtime.InteropServices
xl_type=typeof(Application).GetCustomAttributes(typeof(CoClassAttribute),true)[0].CoClass
xl=xl_type()
xl.Visible=true
xl.Workbooks.Add
다음
:
xl.Range["A1","A2"].Value=12
xl.Range["A1",System.Type.Missing].Value="Alpha"
(xl.ActiveSheet as Worksheet).Range["A1","A2"].Value2='Whatever'
이러한 모든 작업 , 근본적으로 당신은 늦은 바인딩 (당신의 오리 타이핑이하는 것)에서 익숙한 "Scriptiness"를 포기해야합니다.
VB/VBScript와 다른 점은 대부분의 언어 (C# 4.0 제외)에서 일반적으로 선택적 매개 변수는 투명하게 처리되지 않으므로 처리 할 때 API를 더 자세히 살펴야한다는 것입니다. 선택적 매개 변수를 지원하는 메서드 (System.Type.Missing 또는 System.Reflection에 해당하는 매개 변수로 바꾸기) Excel 상호 운용성 문서를 통해이를 확인할 수 있습니다.하지만 리플렉션을 사용하면 옵션으로 표시된 매개 변수를 쉽게 찾을 수 있습니다.
Ruby는 이러한 개체를 늦게 바인딩하는 데 알맞은 솔루션을 가지고 있기 때문에 Boo의 COM interop 시나리오에 누락 된 기능이나 버그가 있다고 의심됩니다.
덧붙여 편집 : Sam Ng writes about indexed property support in C# 4.0; 그의 게시물에 설명 된 문제가 Boo에도 적용될 수 있습니다.
많은 노력을 기울여 주셔서 감사합니다. 좀 더 조사하겠습니다! –