Я создал пакет Nuget.org со следующим (сокращенным) кодом:
namespace MyNugetPackageNS
module MyNugetModule =
open ExcelDna.Integration
// this function is NOT seen in the package user's Excel session
[<ExcelFunction(Category="Test", Description="Add 1.")>]
let plusOne ([<ExcelArgument(Description= "Value.")>] value: double) : obj =
value + 1.0 |> box
Я надеялся, что если пользователь установит пакет и добавит его в свою собственную библиотеку, все файлы Excel функции, определенные в пакете (например, plusOne), будут автоматически отображаться в Excel, но это не так. Кажется, что пользователь должен «обернуть» пакетные функции Excel, чтобы сделать их видимыми в Excel, например:
namespace UserNS
module UserModule =
// need to install the nuget package from Nuget.org
open MyNugetPackageNS.MyNugetModule
open ExcelDna.Integration
// this function is seen in the package user's Excel session
[<ExcelFunction(Category="Test", Description="Add 1.")>]
let plusOne2 ([<ExcelArgument(Description= "Value.")>] value: double) : obj =
MyNugetModule.plusOne value
Мой вопрос: есть ли способ автоматически «сделать видимыми функции Excel пакета» "в сеансе Excel пользователя пакета, без предварительной упаковки каждой функции?
=================
EDIT:
Следуя совету Аугусто, я добавил пакет регистрации Excel-ДНК в свой проект Nuget и на основе примеров, найденных здесь , добавил фрагмент MakeAddInsVisible
, который явно загружает функции Excel проекта Nuget.
namespace MyNugetPackageNS
open ExcelDna.Integration
open ExcelDna.Registration
type MakeAddInsVisible () =
interface IExcelAddIn with
member this.AutoOpen () =
ExcelRegistration.GetExcelFunctions ()
|> ExcelRegistration.RegisterFunctions
member this.AutoClose () = ()
module MyNugetModule =
open ExcelDna.Integration
// this function is STILL NOT seen in the package user's Excel session
[<ExcelFunction(Category="Test", Description="Add 1.")>]
let plusOne ([<ExcelArgument(Description= "Value.")>] value: double) : obj =
value + 1.0 |> box
Я также добавил флаг ExplicitRegistration
в файл .dna моего проекта Nuget:
<DnaLibrary Name="MyNugetPackageNS Add-In" RuntimeVersion="v4.0" xmlns="http://schemas.excel-dna.net/addin/2018/05/dnalibrary">
<ExternalLibrary Path="MyNugetPackageNS.dll" ExplicitExports="true" ExplicitRegistration="true" LoadFromBytes="true" Pack="true" IncludePdb="false" />
</DnaLibrary>
«Локально» (то есть, когда я использую MyNugetPackageNS как обычный пакет, прежде чем экспортировать его в Nuget.org), похоже, это работает так, как ожидалось: из-за флага ExplicitRegistration="true"
в файле .dna функции Excel по-прежнему регистрируются из-за наличия фрагмента MakeAddInsVisible
(и функция Excel не будет зарегистрирована, когда фрагмент закомментирован).
Теперь я экспортировал этот новый код на nuget.org и загрузил пакет в проект пользователя пакета nuget (без каких-либо изменений в приведенном выше коде namespace UserNS ...
).
К сожалению MyNugetPackageNS
Функции Excel по-прежнему невидимы из сеанса Excel пользователя пакета nuget.
Что я пропустил?