2011-10-31 2 views
3

Excel DNA을 평가하여 내 Excel 추가 기능 중 하나에 사용하려고합니다. C# 함수 (.NET 4.0)를 사용하며 Excel에서이 함수를 호출하려고합니다. 내가 관심을 갖는 이유는 내 addin 사용자가 관리자가 아니기 때문에 내 addin 작업을 얻으려고 .NET DLL에 regasm을 수행하지 않는 해결책을 찾을 수 있다면 획기적인 것입니다.Excel DNA - 모두 함께 regasm하는 것을 피할 수 있습니까?

마치 워크 시트 함수 (간단한 반환 유형 및 인수 포함) 인 경우 private string Add (int a, double b) 으로 Excel 데이터를 사용하여 쉽게 노출 할 수 있다는 것을 알고 있습니다. 또한 나는 VBA에서 Application.Run을 사용하여이 간단한 함수를 호출 할 수 있음을 알고 있습니다.

그러나 API에 복잡한 유형이 있고 VBA에서이 유형을 사용하려면 어셈블리 및 유형을 regasm해야합니까? 이 같이 예 :

private MyType AddLogic (myType1 A, myType2 B) 

또는이 나는 또한 어떤 RegAsm을 나에 regsvr32없이 VBA 함수의 같은 종류를 소비 할 수있는, 엑셀 DNA에 어떤 방법이 있나요?

감사 마니

답변

5

당신이 언급하는 내장 된 엑셀-DNA에서 COM 서버를 지원합니다. 몇 가지 옵션이 있습니다. 모두 관리자 권한이없는 사용자에게 적합합니다. 그들은 다음 런타임에 바인딩 VBA에서 사용할 수있을 것이다 (그래서 그 COM 형식을 호출하는 VBA에서 모든 것이 '변형'이 될 것입니다 그리고 당신은 더 인텔리을 얻을) -

  • 당신은 당신에 AutoOpen에서 런타임에 COM 형식을 등록 할 수 있습니다.
  • COM 서버로 .xll을 사용하여 regsvr32로 COM 유형을 등록 할 수 있습니다. Excel-DNA는 사용자가 항상 쓸 수있는 레지스트리의 HKEY_LOCAL_USER 부분에 형식을 등록합니다. 그러면 .xll 추가 기능이로드되지 않은 경우에도 COM 노출 형식을 사용하는 VBA 프로젝트가 실행됩니다.
  • COM 노출 형식에 대한 형식 라이브러리 정보를 추가하려면 관리자 권한없이 다시 작동하는 regsvr32 등록을 수행해야합니다. 그런 다음 VBA에서 인텔리 센스 등을 얻습니다.

네이티브 Excel-DNA .xll이 .NET 유형 자체의 COM 활성화를 중재하기 때문에 런타임 활성화를 위해 관리되는 어셈블리를 등록하는 RegAsm을 사용하지 마십시오.

워크 시트 기능, 리본 등을 제공하는 데 관심이 없으면 Excel-DNA가 필요하지 않을 것입니다. HKEY_CLASSES_ROOT 대신 HKEY_LOCAL_USER의 레지스트리 항목을 올바르게 수정할 .reg 스크립트를 작성하여 VBA의 비 관리자가 사용할 .NET 어셈블리를 등록 할 수 있습니다. Excel-DNA의 비 관리자 등록은 특별한 마법이 아닙니다. Excel-DNA에서이 기능을 통합하는 주된 이유는 이러한 개체가 다른 Excel-DNA 추가 기능과 동일한 AppDomain에서 활성화되도록하는 것입니다.이 기능은 까다 롭고 때로는 중요합니다.

+0

Govert에 대해 자세히 알려 주셔서 감사합니다. 나에게 두 번째 옵션은 좋게 들린다. 그냥 확인하려면 Excel에서 regsvr32라고 말하려합니까? dll .xll은 HKLU에만 레지스트리 항목을 만들기 때문에 관리자 권한이 필요하지 않습니다. 왜냐하면, 일반적으로 네이티브 dll에서 regsvr32를 실행할 때 관리자 권한이 필요하다는 것을 알기 때문입니다. –

+0

그게 계획이지만, 물론 당신도 테스트해야합니다. – Govert

+0

어떻게이 Mani와 일이 진행되고 있습니까? 나는 비슷한 경우에있다. – nicolas

관련 문제