Excel DNA и Excel Добавить в COM

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

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


person JoeyDiaz    schedule 12.07.2018    source источник


Ответы (2)


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

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

person C. Augusto Proiete    schedule 12.07.2018
comment
привет, я понял, и, возможно, мой вопрос не был ясен, но то, что я спрашивал, если я использую excel dna в надежде получить ленту и кнопку для создания книги / листа Excel, мне все еще нужно использовать Excel.Interop для записи в Excel или у ДНК Excel есть собственный способ работы с Excel? - person JoeyDiaz; 12.07.2018
comment
@JoeyDiaz Вам не нужно использовать Excel.Interop, но я бы рекомендовал вам его использовать. Вы можете просто использовать ExcelDnaUtil.Application напрямую через переменную dynamic, без необходимости Excel.Interop, как подробно объясняет @Govert в своем ответе ... Однако использование Excel.Interop значительно упрощает разработку, потому что вы получаете IntelliSense ... - person C. Augusto Proiete; 12.07.2018

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

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

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

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

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

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

person Govert    schedule 12.07.2018