2017-01-05 3 views
0

Я использую библиотеку ExcelDNA, которая, похоже, использует комбинацию C-API и COM-интерфейса Excel.В чем разница между тем, как Excel предоставляет API COM по сравнению с C-API

Как эти интерфейсы отличаются с точки зрения реализации Excel? С сайта Microsoft (https://msdn.microsoft.com/en-us/library/office/bb687829.aspx):

" Настройка Excel Пользовательский интерфейс

Для многих версий Excel, С API не был лучшим выбором для настройки пользовательского интерфейса VBA имеет превосходный доступ. к объектам и событиям Excel. Пользовательский интерфейс, представленный в Excel 2007, значительно отличается от более ранних версий как по внешнему виду, так и по базовой технологии. Вы можете наилучшим образом настроить этот интерфейс с помощью ресурсов управляемого кода ».

Что делает COM более подходящим для редактирования пользовательского интерфейса Excel, чем C-API?

ответ

1

Его проще и быстрее писать материалы пользовательского интерфейса с использованием VBA или .NET, а не C или C++.

Интерфейс COM имеет доступ к гораздо более богатому набору объектов и событий Excel, чем интерфейс C-API, но C-API является предпочтительным для написания UDF, поскольку он выполняет значительно лучше, чем COM, и позволяет такие вещи, как многопоточность, async, RTD, кластер и т. д., которые COM не предлагает.

Обратите внимание, что использование COM из ExcelDNA означает использование COM-INTEROP, который по своей сути медленный.

+0

Я считаю, что ExcelDNA использует COM-взаимодействия для жидкостей Ribbon взаимодействий, а С-интерфейс для VBA. Если это будет правильно, это все равно будет проблемой? –

+1

Excel-DNA не работает с VBA. Excel DNA позволяет использовать как C-API, так и COM-Interop в том же решении. Что вы используете, зависит как от выбора, так и от особенностей интерфейса. Обычно вы исключительно используете C-API для всего кода UDF и исключительно COM-Interop для всего остального. –

0

Я согласен с Чарльзом относительно легкости и снижения совокупной стоимости владения компонентами пользовательского интерфейса и быстрого прототипирования новых функций с использованием C# и Excel DNA (или Addin Express, чтобы быть справедливым).

Прежде чем объявить о том, что производительность имеет первостепенное значение, установите некоторые ожидания и измерьте расчеты или события. Если есть действительно чувствительный к производительности раздел, изолируйте его, а затем напишите управляемый код C++, который затем можно будет интегрировать с пользовательским интерфейсом, написанным на C# или VB.NET.

Также, небольшая поправка к комментарию Чарльза относительно ДНК Excel и VBA; они работают вместе. Несколько примеров можно найти по адресу:

Смежные вопросы