1

Microsoft の開発フレームワーク (Excel 2010) を使用して、C++ で Excel アドインを作成しています。

MAX、MIN、AVERAGEのように可変数の引数を持つExcel関数をC ++で記述できるかどうかを知りたいです...

前もって感謝します。

4

3 に答える 3

0

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;
}
于 2013-03-31T21:20:34.877 に答える
0

Excel アドインは COM オブジェクトとして構築されていますよね?

COM インターフェイス定義で[vararg]属性を使用してみましたか?

于 2013-03-28T17:42:41.730 に答える
0

XLLインターフェイスにコーディングしていると仮定すると、AFAIKで可変数の引数を処理する唯一の方法は、各引数を処理したい最大数まで順番に宣言し(Excelバージョンの制限に従う)、どの引数をチェックするかですがありません。

于 2013-03-28T18:22:20.307 に答える