Надстройка автоматизации Excel User-Defined-Functions (UDF) 1 со встроенным установщиком, оба написаны на VB.Net
Полное решение Microsoft Visual Studio 2022 и исходный код проекта.
В комплект входят установщики как для 32-битной, так и для 64-битной версии Office/Excel.
Нажмите «Релизы» > «Активы», чтобы просмотреть готовые примеры.
Пользовательские функции Excel (UDF), разработанные в VB.Net, существуют уже много лет, ранние примеры которых включают:
http://www.cpearson.com/Excel/CreatingNETFunctionLib.aspx
https://www.codeproject.com/Articles/7753/Create-an-Automation-Add-In-for-Excel-using-NET
Хотя эти функции работают хорошо, их развертывание может быть более проблематичным, особенно если конечные пользователи могут быть не знакомы с утилитами командной строки, такими как Regasm, или им не разрешено запускать их для завершения установки.
Таким образом, целями проектирования этого проекта являются:
Для сборки решения необходим ПК с ОС Windows и установленным следующим программным обеспечением.
Рекомендуется использовать «свежую сборку» всех вышеперечисленных компонентов, если это возможно, на выделенном компьютере для разработки и со всеми установленными обновлениями.
В Visual Studio должны быть установлены следующие элементы
Следующая утилита полезна для проверки процесса регистрации, но не является обязательной.
Надстройка автоматизации регистрируется в процессе установки.
В реестр необходимо записать разные значения для 32- и 64-разрядных версий Office.
Класс установщика предоставляет эти значения. Свойства настраиваемого действия задаются для версии, необходимой в каждом проекте установщика.
Предоставляются отдельные проекты установщика 32- и 64-разрядного Office, которые необходимо создавать для каждой требуемой версии.
Visual Studio создает два выходных файла: setup.exe
и AUTO_INSTALLER_nn.msi
из каждого проекта установщика.
Любой из этих файлов может быть передан конечным пользователям и запущен ими для установки и удаления по мере необходимости.
После запуска установщика пользователям необходимо настроить Excel для включения надстройки автоматизации.
Из Excel > Файл > Параметры > Надстройки > Управление надстройками Excel.
Нажмите «Автоматизация», прокрутите вниз и выберите «АВТОМАТИЗАЦИЯ.Функции».
Нажмите ОК, чтобы подтвердить
Предоставляются два примера формул Excel.
=IFX()
в ячейке рабочего листа возвращает текстовую строку AUTO FX OK
=TIMENOW()
в ячейке рабочего листа возвращает текущее время в миллисекундах, например 12:34:56.789
Это «изменчивая» функция, которая будет пересчитываться при нажатии клавиши F9 или изменении другой ячейки.
Функции, предлагаемые надстройкой, можно просмотреть, нажав «Формулы» > «Вставить функцию» и выбрав АВТОМАТИЗАЦИЯ.Функции в качестве категории.
Пользователи могут удалить надстройку, щелкнув правой кнопкой мыши кнопку «Пуск» Windows и выбрав «Приложения и функции».
Прокрутите вниз до Automation FX и выберите «Удалить».
Модуль класса Installer.vb
выполняет регистрацию сборки и обновления реестра, необходимые, когда разработчик или конечный пользователь запускает программу установки .exe или .msi.
Тег <System.ComponentModel.RunInstaller(True)>
автоматически предоставляется vb.net в файле Installer.Designer.vb
, когда в проект добавляется новый модуль класса Installer.
Этот тег используется программой установки для вызова Public Overrides Sub Install(stateSaver As IDictionary)
через свойства настраиваемого действия в проектах AUTO_INSTALLER_32 и AUTO_INSTALLER_64.
Затем Sub Install
вызывает RegisterAssembly
, что функционально эквивалентно 2 запуску RegAsm.exe
вручную.
Сам RegAsm.exe
использует методы, предоставляемые RegistrationServices 3.
Всегда следует соблюдать следующие пункты, чтобы избежать выполнения конфликтующих обновлений реестра во время разработки и тестирования.
В проекте AUTO_FUNCTIONS > Properties приведенные ниже параметры ни в коем случае не следует выбирать.
Register for COM Interop
в разделе Компиляция. Make assembly COM-Visible
в разделе Приложение > Информация о сборке. Теги <ComRegisterFunction>
и <ComUnRegisterFunction>
также не следует использовать ни в одном модуле.
В каждом проекте > Основные свойства вывода для параметра Register должно быть установлено значение 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 ↩