Создайте надстройку и 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 for Excel создавать меню и кнопки?


person SoftTimur    schedule 08.11.2016    source источник


Ответы (1)


Вот несколько моментов:

  1. JavaScript API, это веб-надстройки, поэтому ваша надстройка не будет работать без Интернета, но похоже, что ваше решение предназначено для поставщика данных, поэтому я предполагаю, что у ваших клиентов будет Интернет. Как вы сказали, это не работало для версий до 2013 года. см. здесь

  2. VSTO, вероятно, лучший вариант, но вам нужно знать о серьезных изменениях, связанных с MDI / SDI, между Excel 2013 и предыдущей версией. Могут появиться и другие небольшие изменения (изображение idmso, некоторые события ..), но VSTO 2007 должен быть совместим с 2016 годом. VSTO 2016 не существует, последний выпуск - 2010 (среда выполнения версии 4.0). Вы должны регулярно тестировать его во время разработки, чтобы проверить совместимость.

  3. Можно добавить меню (раскрывающийся список) и панель инструментов через API Excel C (используя xlfAddMenu и xlfAddToolbar), но не элементы управления ленты, для которых требуется COM-интерфейс IRibbonExtensibility. Таким образом, единственный способ добавить элементы управления в rubbon - использовать технологию COM (на которой основан VSTO). API Excel C не изменился с версии 2007 года, поэтому он будет полностью совместим со всеми версиями. Вы можете найти рабочий пример в Excel C API 2010 SDK (нет в SDK 2013 - эта часть была удалена), в файле GENERIC.C, см. xlAutoOpen функция. Также учтите, что найти информацию об этом очень сложно.

С моей точки зрения, у вас есть две возможности: 1) реализовать все через VSTO или 2) реализовать свои подпрограммы через API Excel C и взаимодействовать с ним через надстройку VSTO, которая используется только для элементов управления на ленте. Я бы предложил вам первое решение (VSTO), вы найдете дополнительную документацию по нему.

РЕДАКТИРОВАТЬ:

Только что понял, что ваш вопрос также касается UDF. Есть три способа добавить UDF в Excel: через VBA, через автоматизацию COM и через API Excel C. Лучшим вариантом для UDF, безусловно, является API EXCEL C, но существует проект с открытым исходным кодом, который «оборачивает» этот API в C #, см. ДНК Excel.

ИЗМЕНИТЬ 2:

В качестве альтернативы VSTO, все еще находящейся в сети, существует проект NetOffice на Codeplex, который стоит попробовать. , они утверждают, что поддерживают все версии Excel. Это не поможет вам в части UDF, но для графического интерфейса это хороший кандидат.

person Malick    schedule 08.11.2016
comment
И если я выберу Excel C API + VSTO (для ленты), я мог бы использовать VSTO 2010, потому что до Excel 2010 нет ленты? - person SoftTimur; 08.11.2016
comment
Спасибо за ответ ... Итак, я использую исключительно VSTO, я должен использовать VSTO 2007 (а не 2010), чтобы обеспечить совместимость со всеми версиями? А VSTO 2007 позволяет мне создавать UDF, которые также можно использовать в Excel 2007? - person SoftTimur; 08.11.2016
comment
Вам следует использовать VSTO 2010, он будет работать с 2007 - см. en.wikipedia.org/wiki/Visual_Studio_Tools_for_Office но я все же рекомендую вам регулярно тестировать своего разработчика, в Excel 2007 есть лента, поэтому вы сможете управлять ею, как в 2010-2016 годах. Excel C API + VSTO кажется предпочтительным вариантом. Наконец, обратите внимание, что это не будет работать для Mac Osx, потому что API Excel C + VSTO не поддерживаются. - person Malick; 08.11.2016
comment
+ Вы не можете создавать UDF с VSTO - person Malick; 08.11.2016
comment
Если я использую Excel C API + VSTO 2010, нужно ли мне выбирать версию XLL SDK? - person SoftTimur; 08.11.2016
comment
достаточно XLL 2013 SDK, он нацелен на все версии Excel. Если вы хотите узнать больше о XLL, вам следует прочитать об этом книгу Стива Далтона (Финансовые приложения, использующие разработку надстроек Excel на C / C ++). - person Malick; 08.11.2016
comment
Именно в Excel C API + VSTO 2010 я могу использовать VSTO 2010 для создания меню, кнопок и ленты для всех версий Excel и использовать Excel C API только для UDF, верно? - person SoftTimur; 08.11.2016