Я пишу надстройку Excel в C ++ с использованием Microsoft dev Framework (Excel 2010).
Я хотел бы знать, возможно ли написать на С ++ функцию Excel, которая имеет переменное число аргументов, как MAX, MIN, AVERAGE …
Заранее спасибо.
Предполагая, что вы кодируете интерфейс XLL, тогда AFAIK единственный способ обработать переменное число аргументов — объявить каждый из аргументов по очереди до максимального числа, которое вы хотите обработать (с учетом ограничений версии Excel), а затем проверить, какие из них не хватает.
Надстройки Excel построены как COM-объекты, верно?
Вы пытались использовать [vararg]
атрибут на вашем определении интерфейса COM?
Вот пример, который обрабатывает до 16 аргументов, используя http://xll.codeplex.com.
// 16 LPOPERs
#define XLL_LPOPERSX XLL_LPOPERX XLL_LPOPERX XLL_LPOPERX XLL_LPOPERX XLL_LPOPERX XLL_LPOPERX XLL_LPOPERX XLL_LPOPERX \
XLL_LPOPERX XLL_LPOPERX XLL_LPOPERX XLL_LPOPERX XLL_LPOPERX XLL_LPOPERX XLL_LPOPERX XLL_LPOPERX
static AddInX xai_functional_args(
FunctionX(XLL_LPOPERSX, _T("?xll_functional_args"), _T("FUNCTIONAL.ARGS"))
.Arg(XLL_LPOPERSX, _T("Arg1, ..."), _T("are a numeric arguments or NA() to indicate a missing argument."))
.Category(CATEGORY)
.FunctionHelp(_T("Return an array for the second argument to FUNCTIONAL.BIND."))
.Documentation(
_T("Non numeric arguments will not be bound.")
)
);
LPOPER WINAPI
xll_functional_args(LPOPERX px)
{
#pragma XLLEXPORT
static OPER o;
o.resize(0,0);
for (LPOPERX* ppx = &px; (*ppx)->xltype != xltypeMissing && ppx - &px < 16; ++ppx) {
o.push_back(**ppx);
}
o.resize(1, o.size());
return &o;
}