Вопрос:
У меня есть надстройка Excel 2003, развернутая в одном из наших отделов, которая иногда нуждается в обновлении. В настоящее время я публикую новую версию с моей машины в центральное место, это обновляет номер версии, хранящейся в базе данных, которую надстройка проверяет каждый раз, когда выполняется какой-либо из модулей внутри нее, и если номер новой версии, то надстройка останавливается с сообщением, информирующим пользователя о необходимости обновления надстройки.
В настоящее время они включают в себя запуск другой книги с событием workbook_open, которое изменяет надстройку.
То, что я хотел бы иметь, – это надстройка, обнаруживающая, что доступна более новая версия и тихо ее устанавливает, прежде чем продолжать работу с пользователем. Проблема заключается в том, что это не удается на первом этапе удаления существующей версии, потому что любой код в надстройке сразу же заканчивается, когда надстройка удаляется.
Я бы создал некоторый код в пользователе personal.xls “на лету”, чтобы обрабатывать переход, но я не могу установить флаг “Доверять доступ к визуальному базовому проекту” на машинах пользователей, поэтому не может быть реплицирован кода в надстройке.
Единственный способ, который я вижу здесь, состоит в том, чтобы иметь две надстройки: одну, которая обрабатывает обновления, и одну, которая фактически выполняет эту работу. Проблема возникает, когда я неизбежно должен обновить надстройку обновления!
Может ли кто-нибудь предложить лучшее решение? Это должен быть 100% Excel, не VSTO и т.д.
Лучший ответ:
Было приятно, что Дик Куслайка написал блог об управлении надстройками сегодня!
Некоторые хорошие предложения, которые могут быть применены к моей ситуации там.
Ответ №1
Мы используем отдельное дополнение как загрузчик.
- Основное дополнение может обновить загрузчик
- Если основной аддон нуждается в обновлении, он загружает загрузочный файл, а затем использует вызов OnTime для планирования вызова процедуры бутстрапа в начальной загрузке и сразу же выгружает себя.
- Выполняется вызов ontime.
- загрузочный загрузочный файл загружает основное дополнение, перезагружает основной аддон, выгружает сам.
Сложный, но он работает.
Ответ №2
Один из способов я достиг чего-то подобного, хотя, некоторое время назад, выглядит следующим образом:
Предоставьте кнопку “Обновить” на общей странице (это может быть общий файл, если вы используете много), и когда пользователи нажимают на него, он открывает xls в сетевом расположении и копирует код из этого файла в локальный файл и закрывает вновь открытые файлы.
Таким образом, всякий раз, когда у меня было обновление, я отправлял электронное письмо с просьбой обновить код локально.
Работало так, что у меня было мало пользователей, а обновлений было довольно мало. Если вы хотите автоматическое обновление, что мешает вам проверять номер версии в каждом открытии файла.
Ответ №3
Используя развертывание ClickOnce из коробки, версия надстройки проверяется всякий раз, когда запускается приложение, использующее его (Excel). Не уверен, что вы можете развернуть не управляемый код таким образом.
Ответ №4
Я попробовал что-то другое, шаг за шагом:
1. напишите addin и поместите его на разделенное пространство диска
2. добавьте проект в ссылки VBA
3. Ваши функции и макросы, используемые в листах excel, добавляют в качестве ссылок на дополнения
каждый раз, когда загружаются листы, добавляются новые дополнения и ссылки.
i запустите решение кнопки обновления, из-за проблем, когда сеть не подключена к сети.
Ответ №5
Поскольку я нигде не нашел “рабочего процесса”, я опубликую свой опыт со вчерашнего дня, когда я столкнулся почти с той же проблемой. (Нет автоматических обновлений)
В ссылке @Lunatik на dilydoseofexcel.com Чарльз опубликовал свой Addin (можно загрузить с http://www.decisionmodels.com/downloads.htm#addload), который разрешил мою ситуацию.
Содержание
Предпосылки
Любой пользователь, который хочет использовать плагины на удаленном сервере, должен добавить надстройку AddLoaderV2.xla.
Из Excel: Developer Tab — Excel Add-ins — Browse -…AddLoaderV2.xla — select ‘NO’ when asked to copy it locally
сооружения
- Структура папок на стороне сервера
T:myremotefolderSOFTWAREMSOFFICEExcel_Add-ins . ├── AddinLoad.txt ├── AddLoaderV2.xla └── USER_SonGokussj4 ├── FinancialFunctions_v0.0.1.xlam ├── FinancialFunctions_v0.0.2.xlam └── dev_FinancialFunctions_v0.0.3.xlam
- Содержание AddinLoad.txt
FinancialFunctions, auto, T:myremotefolderSOFTWAREMSOFFICEExcel_Add-insUSER_SonGokussj4
Примечание: префикс USER папки – это мое предпочтение, потому что я поддерживаю надстройки для большого количества людей.
Мой рабочий процесс (обновление Addin)
- Когда я хочу обновить FinancialFunctions_v0.0.2.xlam, я делаю копию (потому что v0.0.2 используется многими людьми): dev_FinanctialFunction_v0.0.3.xlam
- Я открываю v0.0.3 и делаю необходимые изменения
- Когда я FinanctialFunctions_v0.0.3.xlam, я переименую его в FinanctialFunctions_v0.0.3.xlam
- Я отправляю электронное письмо в мой отдел, эта новая версия доступна
- Теперь каждый новый открытый Excel будет auto загружать (определенный в AddinLoad.txt) v0.0.3
- Если пользователь не хочет закрывать свой Excel, на вкладке Addins есть: https://i.imgur.com/H2ru2hV.png, поэтому пользователь просто выбирает надстройку для перезагрузки.
закрытие
Я предполагаю, что это не будет много работы, чтобы сделать некоторые автоматизации от вашего Addin как “проверить, если новая версия доступна, если да, то вызовите reload функцию AddLoaderV2 Addin.”
Надеюсь, это кому-нибудь поможет. Моя самая большая проблема понимания именования .xlam файлов и AddinLoad.txt имени корня всегда загружать только самую последнюю версию. Существует 3-страничный файл readme, когда вы загружаете его Addin.
Чарльз на помощь! Хорошего дня.
Теперь я должен найти что-то похожее, чтобы загрузить дополнения PowerPoint…