Чтобы иметь функцию Excel-DNA, которая позволяет передавать неизвестное количество аргументов во время выполнения, вам необходимо использовать params object[]
в аргументах вашей функции.
public static class MyFunctions
{
[ExcelFunction]
public static object Hello(params object[] values)
{
return "Hello " + DateTime.Now;
}
}
Тогда не имеет значения, если вы вызываете его с жестко закодированными значениями, например, =Hello(10, 20)
, или если вы используете ссылки на ячейки, например, =Hello(A1,A5,A10)
.
Однако переменное число аргументов не поддерживается вне of-the-box от Excel-DNA, и поэтому вам нужно будет использовать вспомогательную библиотеку ExcelDna.Registration
для регистрации ваших функций.
Установите ExcelDna . Зарегистрируйте пакет NuGet , затем в файле .dna
отметьте ссылку на сборку надстройки для использования ExplicitRegistration
, например:
<?xml version="1.0" encoding="utf-8"?>
<DnaLibrary Name="My Add-In" (...)>
<ExternalLibrary Path="MyAddIn.dll" ExplicitRegistration="true" (...) />
</DnaLibrary>
Затем, в своем AutoOpen
, вы зарегистрируетесь функции с ProcessParamsRegistrations
вызовом ... например,
public class AddIn : IExcelAddIn
{
public void AutoOpen()
{
ExcelRegistration
.GetExcelFunctions()
.ProcessParamsRegistrations()
.RegisterFunctions();
// ...
}
public void AutoClose()
{
// ...
}
}
Неявная или явная регистрация функций
По умолчанию Excel-DNA ищет каждый public static
метод в вашей сборке и регистрирует их как функции в Excel. Это неявный процесс регистрации.
ExplicitRegistration="true"
отключает выключение неявной регистрации и, следовательно, ничего не регистрируется автоматически - вы должны сделать это самостоятельно - это то, что я Я делаю в AutoOpen
выше с вызовом ... RegisterFunctions()
. Если вы не отключите неявную регистрацию, то в конечном итоге функции будут зарегистрированы дважды (один раз неявным процессом, затем снова вашим кодом) , и вы получите сообщения об ошибках