Создайте надстройку и UDF для всех версий Excel
Один поставщик данных хочет разработать надстройку для Excel, это требования:
1) его можно установить на рабочий стол. Он добавляет одно меню и кнопки в ленте, а также предоставляет некоторые специальные функции (для получения данных в реальном времени, например, функцию Bloomberg).
2) надстройка должна работать в Excel 2007, 2010, 2013 и 2016 годах.
Вопрос в том, какую технологию следует использовать для создания этой надстройки. Вот некоторые из моих мыслей:
1) JavaScript API для Excel не подходит, потому что он не работает для Excel 2007, 2010.
2) ВСТО. Кто-нибудь знает, работают ли надстройки VSTO для Excel 2013 и 2016?; Можно ли создать одну надстройку VSTO, которая работает для всех Excel 2007, 2010, 2013 и 2016?
3) C API для Excel. Похоже, C API для Excel используется для создания XLL. Кто-нибудь знает, может ли C API для Excel создавать меню и кнопки?
1 ответ
Вот несколько моментов:
JavaScript API, это надстройка на основе Интернета, поэтому ваша надстройка не будет работать без интернета, но кажется, что ваше решение предназначено для поставщика данных, поэтому я предполагаю, что у ваших клиентов будет интернет. Как вы сказали, он не работал для версий до 2013 года. смотрите здесь
VSTO, вероятно, лучший вариант, но вы должны знать о существенных изменениях, связанных с MDI/SDI, между Excel 2013 и предыдущей версией. Могут появиться другие небольшие изменения (изображение idmso, некоторые события...), но VSTO 2007 должен быть совместим с 2016 годом. VSTO 2016 не существует, последний выпуск - 2010 (версия 4.0 Runtime). Вы должны регулярно проверять его во время разработки, чтобы проверить совместимость.
Можно добавить меню (раскрывающийся список) и панель инструментов через Excel C Api (используя
xlfAddMenu
а такжеxlfAddToolbar
), но не ленточные элементы управления, которые требуют COM-интерфейса IRibbonExtensibility. Таким образом, единственный способ добавить элементы управления в руббон - это технология COM (на которой основан VSTO). API Excel C не изменился с версии 2007 года, поэтому он будет полностью совместим со всеми версиями. Вы можете найти рабочий пример в SDK Excel C API 2010 (не в SDK 2013 - эта часть была удалена), в файле GENERIC.C см.xlAutoOpen
функция. Также обратите внимание, что найти информацию об этом очень сложно.
С моей точки зрения, у вас есть две возможности: 1) реализовать все через VSTO или 2) реализовать ваши подпрограммы через API-интерфейс Excel C и взаимодействовать с ним через надстройку VSTO, которая просто используется для элементов управления ленты. Я бы предложил вам первое решение (VSTO), вы найдете больше документации об этом.
РЕДАКТИРОВАТЬ:
Только что понял, твой вопрос тоже про UDF. Существует три способа добавления пользовательских функций в Excel: через VBA, с помощью автоматизации COM и через API-интерфейс Excel C. Оптимальным вариантом для UDF является, безусловно, EXCEL C API, но существует проект с открытым исходным кодом, который "оборачивает" этот API в C#, см. Excel DNA.
РЕДАКТИРОВАТЬ 2:
В качестве альтернативы VSTO, все еще в сети, существует проект NetOffice на Codeplex, который стоит попробовать, они утверждают, что поддерживают все версии Excel. Это не поможет вам в части UDF, но для GUI кажется хорошим кандидатом.