Microsoft の開発フレームワーク (Excel 2010) を使用して、C++ で Excel アドインを作成しています。
MAX、MIN、AVERAGEのように可変数の引数を持つExcel関数をC ++で記述できるかどうかを知りたいです...
前もって感謝します。
Microsoft の開発フレームワーク (Excel 2010) を使用して、C++ で Excel アドインを作成しています。
MAX、MIN、AVERAGEのように可変数の引数を持つExcel関数をC ++で記述できるかどうかを知りたいです...
前もって感謝します。
http://xll.codeplex.comを使用して最大 16 個の引数を処理する例を次に示します。
// 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;
}
Excel アドインは COM オブジェクトとして構築されていますよね?
COM インターフェイス定義で[vararg]
属性を使用してみましたか?
XLLインターフェイスにコーディングしていると仮定すると、AFAIKで可変数の引数を処理する唯一の方法は、各引数を処理したい最大数まで順番に宣言し(Excelバージョンの制限に従う)、どの引数をチェックするかですがありません。