За и против автоматизации Excel с помощью VBA по сравнению с .NET

Для меня определили задачу с созданием инструмента финансового планирования в Excel, который извлечет выгоду из некоторых пользовательских функций/макросов.

Моя первоначальная реакция должна была использовать VBA. Я использовал его для управления Excel прежде (скажите 5 лет назад). Но я затем начал задаваться вопросом, буду ли я более обеспеченным использованием VSTO.

Имеет любого, имеет опыт с помощью и techs и может перечислить за и против так, чтобы я мог оценить, какой курс был бы лучшим.

13
задан Andy 22 March 2010 в 03:14
поделиться

3 ответа

Я бы посоветовал вам придерживаться VBA для стандартной разработки с Excel и изучать .NET на этой стороне. Использование .NET определенно является следующим шагом, но оно значительно усложняет разработку Excel.

Кроме того, VSTO не позволяет создавать пользовательские функции рабочего листа («UDF»), поэтому для этого вам потребуется интерфейс VBA или создать управляемую надстройку COM без использования VSTO. Для сравнения, VBA позволяет создавать UDF практически без усилий.

Использование .NET имеет много преимуществ, в основном в отношении строгой типизации, полных возможностей ООП и способности организовывать проекты большего размера. но VBA имеет огромные преимущества перед .NET, когда дело доходит до развертывания, что довольно сложно с Excel при работе с .NET или VSTO. VBA также является более легким языком для изучения и начала.

В целом, я бы посоветовал вам использовать VBA для повседневной разработки, но изучать VB.NET или C # на стороне, чтобы ваши навыки программирования могли развиваться за пределами области Excel. В конце концов, ваш.Навыки .NET могут стать достаточно сильными, так что вы предпочтете использовать его, а не VBA, но вам придется хорошо освоить .NET на тот день.

(Другое подобное мнение по этому поводу см. В Теряю ли я преимущества записи макросов, если разрабатываю приложения Excel в Visual Studio? .)

Редактировать: Обновление, касающееся комментария Энди, ниже:

​​Я искал информацию для сравнения по таким вопросам, как развертывание, отладка и UDF. Судя по ответам на вопрос , я должен был упомянуть, что у меня более 5 лет опыта работы с C #, тогда как мои навыки VBA (или их отсутствие ) выходят только 3 или 4 раза в десятилетие

Хорошо, да, ты должен был сказать! Большинство людей, задающих подобные вопросы, - это программисты VBA, которые хотят освоить .NET. Я неправильно понял.

В вашем случае вам следует использовать C #, но я настоятельно рекомендую использовать для этого C # 4.0 в Visual Studio 2010, это значительно улучшит синтаксис, необходимый при работе с объектной моделью COM, такой как Excel. VS 2010 в настоящее время находится в стадии бета-версии 2, а дата окончательной первоначальной версии назначена на 12 апреля, так что мы почти у цели.

Что касается развертывания, с вашим опытом, я не думаю, что у вас будет слишком много проблем с установочными пакетами и т.п., а инструменты Visual Studio для Office (VSTO) исключительно хороши для двух вещей:

  1. Создание настраиваемого расположение ленты для надстройки с помощью конструктора перетаскивания. Без конструктора перетаскивания вам придется вместо этого предоставить XML. XML - это прекрасно, если вы спросите меня, но конструктор перетаскивания действительно мечта использовать

  2. Использование элементов управления .NET на рабочем листе.Я не знаю, является ли это частью того, что вы планируете делать, но VSTO позволяет использовать элементы управления .NET на листе. Это действительно хорошая возможность для .NET-программиста, поскольку эти элементы управления выглядят немного более гладко и специально разработаны для работы с .NET.

К сожалению, VSTO доступен только для Excel 2003 и более поздних версий, и я думаю, что вам придется создавать отдельные надстройки для Excel 2003 и Excel 2007. Управляемые надстройки COM, созданные без использования VSTO, с другой стороны, можно сделать совместим с Excel 2000 и выше без труда. Наконец, VSTO не поддерживает создание UDF, и, следовательно, вам придется либо создать управляемую надстройку автоматизации для этого, либо использовать интерфейс VBA, который вызывает ваши функции VSTO.

В целом, я бы выбрал VSTO, если вы можете ограничиться Excel 2007 и более поздними версиями. Я бы рассмотрел VSTO, если ваши требования относятся к Excel 2003 и выше. И я бы выбрал управляемую надстройку COM, если вам нужно иметь возможность работать в Excel версии 2000 и выше.

Для поддержки UDF я бы создал надстройку управляемой автоматизации, которая была бы жизнеспособной для Excel 2002 и более поздних версий. Если вам нужны UDF в Excel 2000 или ниже, вам понадобится внешний интерфейс VBA, который вызывает COM-видимые методы в вашей сборке .NET.

На мой взгляд, это основные «за» и «против». Дайте мне знать, если вам нужно знать больше.

- Майк

8
ответ дан 2 December 2019 в 00:31
поделиться

Я не думаю, что есть что-то принципиально неправильное в кодировании этого на VBA в Excel. Его преимущество заключается в том, что он работает в пространстве процессов Excel, а взаимодействие VBA с объектной моделью Excels очень простое. Однако вам (и вашим пользователям) нужно действительно думать о своем инструменте как о надстройке Excel.

Если вы хотите, чтобы ваш инструмент отличался от Excel, автоматизация - ваш вариант. Это немного медленнее (вы «вне процесса»), и объектная модель немного менее чиста, но ваш инструмент будет иметь собственную идентичность.

(обратите внимание, если вы используете C # и если у вас есть возможность использовать VS2010 и C # 4, есть множество улучшений автоматизации, которые стоит обновить)

2
ответ дан 2 December 2019 в 00:31
поделиться

SpreadsheetGear for .NET позволяет добавлять компоненты электронных таблиц, совместимые с Excel, в ваши приложения .NET (WinForms, ASP.NET и т. Д.) без недостатков (производительность, простота использования) COM Interop.

Вы можете узнать больше об элементе управления электронной таблицей SpreadsheetGear Windows Forms здесь , увидеть живые образцы ASP.NET здесь и загрузить бесплатную пробную версию здесь , если хотите попробовать самому.

Отказ от ответственности: мне принадлежит SpreadsheetGear LLC

0
ответ дан 2 December 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: