Excel 사용자 정의 함수(UDF) 자동화 추가 기능 1 (통합 설치 프로그램 포함), 둘 다 VB.Net으로 작성됨
전체 Microsoft Visual Studio 2022 솔루션 및 프로젝트 소스 코드.
32비트 및 64비트 Office/Excel용 설치 프로그램이 포함되어 있습니다.
사전 빌드된 예제를 보려면 릴리스 > 자산을 클릭하세요.
VB.Net에서 개발된 Excel 사용자 정의 함수(UDF)는 수년 동안 사용되어 왔으며 초기 예는 다음과 같습니다.
http://www.cpearson.com/Excel/CreatingNETFunctionLib.aspx
https://www.codeproject.com/Articles/7753/Create-an-Automation-Add-In-for-Excel-using-NET
이러한 기능은 잘 작동하지만 배포는 더 문제가 될 수 있습니다. 특히 최종 사용자가 익숙하지 않거나 Regasm과 같은 명령줄 유틸리티를 실행하여 설치를 완료하는 것이 허용되는 경우에는 더욱 그렇습니다.
따라서 이 프로젝트의 설계 목표는 다음과 같습니다.
솔루션을 구축하려면 다음 소프트웨어가 설치된 Windows PC가 필요합니다.
가능하다면 전용 개발 PC에서 위의 모든 구성 요소를 '새로 빌드'하고 모든 업데이트를 적용하는 것이 좋습니다.
Visual Studio에는 다음 항목이 설치되어 있어야 합니다.
다음 유틸리티는 등록 프로세스를 검사하는 데 유용하지만 필수는 아닙니다.
자동화 추가 기능은 설치 프로세스 중에 등록됩니다.
32비트 버전과 64비트 버전의 Office에서는 레지스트리에 서로 다른 값을 기록해야 합니다.
설치 관리자 클래스는 이러한 값을 제공하며, 사용자 지정 작업 속성은 각 설치 관리자 프로젝트에 필요한 버전에 대해 설정됩니다.
별도의 32비트 및 64비트 Office 설치 프로그램 프로젝트가 제공되며 필요한 각 버전에 맞게 빌드해야 합니다.
Visual Studio는 각 설치 관리자 프로젝트에서 setup.exe
및 AUTO_INSTALLER_nn.msi
라는 두 개의 출력 파일을 생성합니다.
이러한 파일 중 하나를 최종 사용자에게 배포하고 실행하여 필요에 따라 설치 및 제거할 수 있습니다.
설치 프로그램을 실행한 후 사용자는 자동화 추가 기능을 활성화하도록 Excel을 구성해야 합니다.
Excel > 파일 > 옵션 > 추가 기능 > Excel 추가 기능 관리에서
자동화를 클릭하고 아래로 스크롤하여 AUTOMATION.Functions를 선택합니다.
확인을 클릭하여 확인하세요.
두 가지 샘플 Excel 수식이 제공됩니다.
워크시트 셀의 =IFX()
는 텍스트 문자열 AUTO FX OK
반환합니다.
워크시트 셀의 =TIMENOW()
현재 시간을 밀리초 단위로 반환합니다(예: 12:34:56.789
이는 '휘발성' 기능이며 F9 키를 누르거나 다른 셀이 변경되면 다시 계산됩니다.
추가 기능에서 제공하는 함수는 수식 > 함수 삽입을 클릭하고 카테고리로 AUTOMATION.Functions를 선택하여 나열할 수 있습니다.
사용자는 Windows 시작 버튼을 마우스 오른쪽 버튼으로 클릭하고 앱 및 기능을 선택하여 추가 기능을 제거할 수 있습니다.
Automation FX 까지 아래로 스크롤하고 제거를 선택합니다.
클래스 모듈 Installer.vb
개발자나 최종 사용자가 설치 프로그램 .exe 또는 .msi 프로그램을 실행할 때 필요한 어셈블리 등록 및 레지스트리 업데이트를 수행합니다.
<System.ComponentModel.RunInstaller(True)>
태그는 새 Installer 클래스 모듈이 프로젝트에 추가될 때 Installer.Designer.vb
파일에서 vb.net에 의해 자동으로 제공됩니다.
이 태그는 설치 프로그램에서 프로젝트 AUTO_INSTALLER_32 및 AUTO_INSTALLER_64의 사용자 정의 작업 속성을 통해 Public Overrides Sub Install(stateSaver As IDictionary)
호출하는 데 사용됩니다.
그런 다음 Sub Install
RegAsm.exe
수동으로 실행하는 것과 기능적으로 동일한 RegisterAssembly
호출합니다.
RegAsm.exe
자체는 RegistrationServices 3 에 의해 노출된 메서드를 사용합니다.
개발 및 테스트 중에 레지스트리 업데이트 충돌을 방지하려면 다음 사항을 항상 준수해야 합니다.
프로젝트 AUTO_FUNCTIONS > 속성에서 아래 옵션은 절대로 선택하면 안 됩니다.
Register for COM Interop
. Make assembly COM-Visible
<ComRegisterFunction>
및 <ComUnRegisterFunction>
태그도 어떤 모듈에서도 사용해서는 안 됩니다.
각 프로젝트 > 기본 출력 속성에서 레지스터는 vsdrpDoNotRegister 로 설정되어야 합니다.
모든 GUID가 고유하고 모든 Visual Studio 업데이트, 참조 및 종속성이 통합되도록 새로운 프로덕션 빌드를 개발해야 합니다.
https://support.microsoft.com/en-us/topic/excel-com-add-ins-and-automation-add-ins-91f5ff06-0c9c-b98e-06e9-3657964eec72 ↩
https://learn.microsoft.com/en-us/dotnet/framework/interop/registering-assemblies-with-com ↩
https://learn.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.registrationservices?view=netframework-4.8.1 ↩