Как использовать ExcelDNA, разработанный XLL из C # без Excel - PullRequest
0 голосов
/ 05 октября 2018

мы создали XLL в C # с использованием ExcelDna, как описано в https://excel -dna.net / --- все работает при тестировании в Excel.

Мы хотели бы иметь возможностьиспользовать этот XLL в других проектах .NET - другими словами, как мы можем «разместить» этот XLL из .NET?XLL не является допустимой сборкой .NET, поэтому я не могу добавить ее в качестве ссылки .NET на другие проекты

Это сделано каким-то образом через ExcelDna.Integration dll (которая является сборкой .net)?

Спасибо

1 Ответ

0 голосов
/ 05 октября 2018

Excel-DNA является просто связующим звеном между сборками Excel и .NET.

Если вы хотите повторно использовать функциональность, которая находится внутри сборки .NET, загружаемой надстройкой Excel-DNA (т.е.XLL), тогда вам не нужно XLL для чего-либо ... Все, что вам нужно - это сборка .NET, которую загружает XLL - Добавьте ссылку на , которая в вашем.NET приложение, и вы готовы к работе ... Как и в случае с любой другой библиотекой классов.

Другими словами, внутри вашего файла .dna, который используется Excel-DNA для определения того, чтозагрузить, у вас есть что-то похожее на это:

<DnaLibrary Name="Your Add-In" RuntimeVersion="v4.0">
  <ExternalLibrary Path="YourAssembly.dll" ExplicitExports="false" ... />
</DnaLibrary>

YourAssembly.dll уже является сборкой .NET, которая содержит функции, предоставляемые Excel-DNA.


ПодробнееВажно отметить, что если вы знаете, что у вас будут разные «клиенты» .NET для ваших функций, вы должны спроектировать их для этого, изолировать повторно используемые функции в выделенной сборке и получить ссылку на сборку Excel-DNA, а также раскрытьфункции в Excel, ввместо того, чтобы заставлять клиентов зависеть от сборок Excel-DNA.

например,

  • C # Библиотека классов Functions.dll (ничего не ссылается)
  • C # Библиотека классов ExcelAddIn.dll (ссылки Functions.dll)
  • Приложение C # MyCsApp.exe (ссылки Functions.dll)
  • Библиотека классов C # FunctionsComInterop.dll (ссылки Functions.dll)
  • C ++Приложение MyCppApp.exe (звонки FunctionsComInterop.dll)
  • и т. Д.

diagram

В приведенном выше примере:

  • Functions.dll не не ссылается на какую-либо сборку Excel-DNA и не предоставляет что-либо через COM.Он должен иметь как можно меньше зависимостей (в идеале - нет!)

  • ExcelAddIn.dll создает мост к Excel-DNA и предоставляет функции Excel, которые могут быть вызваны Excel через Excel-DNA.Эти функции просто перенаправляют вызовы в сборку Functions.dll ... Ничего более.

  • FunctionsComInterop.dll создает мост к C ++ и предоставляет функции COM, которые могут вызываться приложением C ++.Эти функции просто перенаправляют вызовы на сборку Functions.dll ... Больше ничего.

...