7

Excelアドイン(xll)に特定の機能があります。アドインは独自仕様であり、ソース コードにはアクセスできません。ただし、アドインに含まれるいくつかの関数を呼び出す必要があり、C# プログラムから呼び出したいと考えています。

現在、xlopers で Excel 関数を呼び出す C++ インターフェイスを作成し、C# からこの C++ インターフェイスを呼び出すことを考えていました。

この種の問題を以前に経験したことがある人は、そのための最善の解決策を知っていますか?

アンソニー

4

5 に答える 5

4

偽の xlcall32.dllを作成し、XLL と同じディレクトリに配置する必要があります (Excel 独自の xlcall32.dll を PATH に配置しないでください)。ここにいくつかのコードがあります:

# include <windows.h>

typedef void* LPXLOPER;

extern "C" void __declspec(dllexport) XLCallVer ( ) {}

extern "C" int __declspec(dllexport) Excel4 (int xlfn, LPXLOPER operRes, int count,... ) { return 0; }

extern "C" int __declspec(dllexport) Excel4v(int xlfn, LPXLOPER operRes, int count, LPXLOPER far opers[]) {return 0;}

ここで、xll-dll.xll という名前の XLL と、2 つの double を適切に追加する xlAdd という関数があるとします (extern "C" __declspec(dllexport) XLOPER * __cdecl xlAdd(XLOPER* pA, XLOPER* pB);

次のコードはそれを呼び出します。


# include <windows.h>
# include <iostream>

// your own header that defines XLOPERs
# include <parser/xll/xloper.hpp>

// pointer to function taking 2 XLOPERS
typedef XLOPER * (__cdecl *xl2args) (XLOPER* , XLOPER* ) ;

void test(){
/// get the XLL address
HINSTANCE h = LoadLibrary("xll-dll.xll");
if (h != NULL){
xl2args myfunc;
/// get my xll-dll.xll function address
myfunc = (xl2args) GetProcAddress(h, "xlAdd");
if (!myfunc) { // handle the error
FreeLibrary(h); }
else { /// build some XLOPERS, call the remote function
XLOPER a,b, *c;
a.xltype = 1; a.val.num = 1. ;
b.xltype = 1; b.val.num = 2. ;
c = (*myfunc)(&a,&b);
std::cout << " call of xll " << c->val.num << std::endl; }
FreeLibrary(h); }
}

int main()
{test();}

私のexeは実際に機能し(驚いたことに)、期待どおりに3を出力します。XLL がパラメーターに対して実際に何を期待しているかについて、ある程度の知識が必要です。メモリを割り当てる場合は、#define xlbitDLLFree 0x4000 が XLOPER c->type に設定されているかどうかを確認し、"xlAutoFree" をコールバックする必要があります。

于 2013-05-16T16:14:36.893 に答える
3

XLL Plus http://www.planatechsolutions.com/xllplus/default.htmをお試しください。少し高価ですが、XLL Wrapper Libraries 機能はまさにあなたが探しているものです:

「C++、Java、C#、または Visual Basic で記述された、コマンド ライン プログラムや対話型アプリケーションなど、他の環境から Excel アドイン関数を呼び出せると便利な場合があります。Xll ラッパー ツールキットには、ツール、ランタイムExcel XLL アドインをラップする COM モジュールと .NET アセンブリの開発に役立つライブラリ、サンプル、ドキュメント

于 2010-05-19T11:28:52.090 に答える
-1

プラグインをインストールしたプログラム ファイルでアセンブリが使用可能かどうかを確認し、そのアセンブリを C# プロジェクトに直接参照します。クラス、メソッド、またはオブジェクトのオブジェクト ブラウザを確認します。

于 2009-12-23T12:24:29.090 に答える
-1

Excell アドイン DLL は、C# で記述されている場合があります。その場合は、おそらく Excel を完全にバイパスできます。ただし、ラッパーが必要な場合があります。

于 2009-12-21T15:34:51.090 に答える
-4

リフレクションを使用してアドインにアクセスできるはずです。The Reflectorを使用して、利用可能なものを確認してください。

于 2009-12-30T20:10:05.803 に答える