1

HPCグリッドでExcelの計算を並列化することを検討しています。Excel2007を使用しているので、XLLのUDFを介してマルチスレッド化しようとしています。これが唯一の方法です(少なくとも2007年)。

XLLをC#でコーディングしたいと思います。このスレッドが示唆しているように、 exceldnaを使用できます。

しかし、どうすればマルチスレッド化すべきか理解できません。マルチスレッド中にすべてのVBA関数をC#で書き直す必要がありますか?複数のスレッドを作成して、それぞれが1つのVBAマクロを呼び出すことはできますか?

4

1 に答える 1

1

Excel-DNAを使用すると、役立つと思われるさまざまなアプローチが可能になります。

  • 「スレッドセーフ」とマークされたUDFを作成して、Excelのマルチスレッド計算のサポートを使用できます。この場合、Excelがスレッドを制御し、異なるスレッドから同時にUDFを呼び出します。
  • Excel-DNAの非同期関数(おそらく.NET 4タスクAPIを使用)を使用してグリッドでの作業を開始し、完了時にExcelに再計算するように通知できます。
  • Excel-DNAでReactiveExtensionsサポートを使用し、Rxライブラリで計算パイプラインを構築できます。
  • Excel2010に組み込まれているWindowsHPCクラスターのサポートを使用して、Excel-DNAを使用してクライアントとクラスターノードでマネージコードをホストできます。

これらのいずれの場合でも、Excel VBAを呼び出すことは意味がありません-Excelは、VBAコードがExcelのメインスレッドで実行されていることを常に確認します。

関数コードがVBAにある場合は、Excel-DNAアドインにC#ではなくVB.NETを使用することを検討してください。これにより、.NETへの移行が非常に簡単になる場合があります。管理対象のExcel-DNAアドインでC#とVBAを組み合わせて作成することもできます。

于 2013-02-27T20:37:29.597 に答える