Как написать надстройки для Excel, которые имеют переменное количество аргументов (например, MAX, MIN …)

Я пишу надстройку Excel в C ++ с использованием Microsoft dev Framework (Excel 2010).

Я хотел бы знать, возможно ли написать на С ++ функцию Excel, которая имеет переменное число аргументов, как MAX, MIN, AVERAGE …

Заранее спасибо.

1

Решение

Предполагая, что вы кодируете интерфейс XLL, тогда AFAIK единственный способ обработать переменное число аргументов — объявить каждый из аргументов по очереди до максимального числа, которое вы хотите обработать (с учетом ограничений версии Excel), а затем проверить, какие из них не хватает.

0

Другие решения

Надстройки Excel построены как COM-объекты, верно?

Вы пытались использовать [vararg] атрибут на вашем определении интерфейса COM?

0

Вот пример, который обрабатывает до 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;
}
0
По вопросам рекламы [email protected]