Excel ДНК и Excel Добавить в COM

У меня был предыдущий опыт работы с надстройкой Excel vsto COM-объектом. В частности, используя Excel.Interop dll для создания рабочего листа и заполнения его данными. Кроме того, взаимодействуйте с рабочим листом, используя события изменения рабочего листа для обновления данных, через C#. Я хотел изучить ДНК Excel и, возможно, использовать его. Я абсолютно новичок в Excel, но при исследовании я нашел только примеры создания функций и ленту с кнопками, но я не видел способа создать рабочий лист и заполнить его из таблицы данных.

Используется ли Excel DNA только для создания надстройки Excel, и если я хочу создать лист, заполнить его данными и иметь события, мне нужно либо использовать Excel.interop dll или OpenXML?

2 ответа

Excel-DNA предназначен для запуска кода.NET из Excel. Если вы хотите, например, иметь собственную ленту в Excel, с кнопкой, которая при нажатии запускает некоторый код.NET для создания новой книги и заполнения некоторых данных и т. Д., Тогда да... Excel-DNA is отличный инструмент для этого.

Если вы хотите создавать файлы Excel вне Excel, например, в консольном приложении или службе Windows, то Excel-DNA не является подходящим инструментом для этого, и вам следует рассмотреть возможность использования Excel.Interop если вы знаете, что ваше приложение будет работать на компьютере с установленным Excel или другими альтернативами, такими как ClosedXml и другие OpenXml-совместимые инструменты, которые будут генерировать файлы Excel без необходимости установки Excel на машину.

У вас есть полный доступ к объектной модели COM COM изнутри вашей надстройки Excel-DNA. Одним из важных шагов является то, что вы должны получить правильный Application корневой объект для экземпляра Excel, на котором размещена ваша надстройка. (Просто звоню new Application() может заполучить другой экземпляр Excel.) Чтобы заполучить Application объект, который вы называете ExcelDnaUtil.Application - которые возвращают COM-объект.

Оттуда вы можете использовать dynamic поддержка в C# для общения с объектной моделью. Но лучше ссылаться на сборки Interop, предоставляя вам IntelliSense и раннее связывание.

Удобный способ ссылки на набор сборок взаимодействия (соответствующий объектной модели Excel 2010) состоит в установке ExcelDna.Interop пакет от NuGet. С помощью функции "Вставить типы взаимодействия" в.NET 4 (которая установлена true по умолчанию), вам не нужно распространять ничего особенного, и ваш код будет совместим со всеми версиями Excel, если там поддерживаются используемые вами части объектной модели.

В качестве точки входа в запуск COM-кода вы можете создать макрос, ярлык ленты или контекстное меню. Из объектной модели вы также можете перехватывать события COM.

Простой пример с подробными инструкциями по созданию кнопки ленты, которая затем запускает некоторый код COM, доступен на GitHub.

Обратите внимание, что оболочки VSTO поверх объектной модели COM (все в Microsoft.Office.Tools.Excel пространства имен) не совместимы с вашей надстройкой Excel-DNA, поэтому вам придется реализовать эту функцию самостоятельно на основе собственной модели объектов COM (типы в Microsoft.Office.Interop.Excel Пространство имен.)

Другие вопросы по тегам