6

Excel 2007 を使用しています。別のバイナリで C# コードを記述しています。コードは、静的クラスとクラスの静的メソッドを使用します。VSTO Excel ワークシート プロジェクトに DLL への参照があります。これを機能させるには、何を追加または変更する必要がありますか?

私のC#コードは次のようになります:

using System;
using System.Collections.Generic;
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

namespace FooStatistics
{
    [ComVisible(true)]
    public static class Statistics
    {
        public static int Count(Range range)
        {
            return range.Count;
        }

次のような数式を Excel セルに入力できるようにしたいと考えています。

=FooStatistic.Statistic.Count(A1:A10)

または何でも。

これを見たことがありますが、Excel 2003 の非静的クラス用のようです。統合が改善されていないとは信じられません。

これに関する多くの StackOverflow の質問を見てきました。それらはネイティブ統合を提供しているようには見えず (多くの人は「X オープン ソース ライブラリを使用する」と言っています)、不吉なことに、多くは OP に受け入れられていません。「COMオブジェクトにしてVBAから呼び出す」というのは求めていません。

だから私は探しています:

  • エクセル2007
  • C# DLL のコード
  • Excel セルから UDF として呼び出す
  • ネイティブ統合

別の StackOverflow リンクを次に示します。このリンクでは、2 人のレスポンダーが次のように述べています。

  • 私の知る限り、VSTO で UDF を直接作成することはできません。
  • VSTO は、Excel UDF の作成をサポートしていません。オートメーション アドインは .Net で作成でき、Microsoft が承認した方法のようです。

これは 2009 年 6 月からの質問です。これは本当ですか? 2009 年には、.NET コンポーネントを COM サーバーとして公開して、Excel 用の呼び出し可能な UDF を取得する必要がありますか?

4

3 に答える 3

2

これらが4つの要件((1)Excel 2007、(2)C#DLLのコード、(3)UDFとしてのExcelセルからの呼び出し、(4)ネイティブ統合)である場合、はい、これは実行できます。簡単に。これを行う方法に関する最良のチュートリアルの1つは、EricCarterの記事「.NETでのExcel用のユーザー定義関数の記述」です。

さらにコードをVSTO経由でホストする場合は、この場合はVBAラッパーを使用する必要があると確信しています。PaulStubbsの記事「VSTOマネージコードでExcelUDFを作成する方法」を参照してください。ここでは、VBAアドインを使用してVBA UDFを公開し、VSTOで記述されたマネージドUDFを呼び出します。

正直なところ、Excel UDFの場合、VSTOの使用は避けたいと思います。VSTOは、マネージドCOMアドインの優れたデザイナーであり、リボンコントロールなどを簡単に追加できます。しかし、それはUDFには役に立ちません(実際、それをサポートしていません)。したがって、私のアドバイスは、 Eric Carterの記事に従って、マネージド自動化アドインを作成し、VSTO要件を削除することです。

これをすれば、問題はないでしょう、私は約束します。:-)

マイク

于 2009-08-20T20:09:12.410 に答える
1

ヒュー、

「X オープン ソース ライブラリを使用する」よりも、「ネイティブ」ソリューションを希望することは理解しています。しかし、VSTO でさえ、Excel にとって非常に「ネイティブ」ではないようです。

あなたの要件はまさに、オートメーション アドインが不適切であることがわかった後、私が ExcelDna ( http://exceldna.codeplex.com ) を開発するきっかけとなったものです。オートメーション アドインのサポートは最近の Excel バージョンでは改善されていませんが、(ExcelDna が使用する) .xll アドイン API は最近のバージョンでサポートが更新されており、現在はマルチスレッドの再計算がサポートされており、非同期呼び出しが Excel に組み込まれています。 2010年。

ExcelDna はソリューションに導入する余分な部分ですが、結果には満足するでしょう。悲しいことに、管理された UDF アドインに関する Microsoft からの明確な指示や、VSTO でのサポートの兆候はありませんでしたが、実際には、ExcelDna でそれを行うのは簡単で軽量であり、非常にうまく機能します。

ガバート

于 2009-10-12T10:08:24.507 に答える