0

C#でカスタムExcel関数を作成しようとしています(レポートデータをWeb APIからExcelにプルしたいと考えています)。ただし、Excelにアクセスすると、新しい自動化アドインを追加できますが、[非アクティブなアプリケーションアドイン]の下に表示されます。ここで何が問題になっていますか?

このブログ投稿に基づいてCOM自動化アドインを作成しました。そして、私のソースコードはここのGithubにあります

VisualStudio2010およびExcel201064ビット(バージョン14.0)を搭載したWindow764ビットマシンで作業しています。私のプロジェクトは、.NETFramework4を使用してx64ビルド構成に設定されています。

私はインターフェースを使用しています:

namespace JS.Formulas
{
    public interface IFunctions
    {
        double JsAdd(double a, double b);
    }
}

そしてクラス:

using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;

namespace JS.Formulas
{
    [ComDefaultInterface(typeof(IFunctions))]
    [Guid("652496B2-6F14-461B-98AF-D86B1BD5F439")]
    public class Functions : IFunctions
    {
        [ComRegisterFunction]
        public static void RegisterFunction(Type type)
        {
            string subkey = @"CLSID\{" + type.GUID.ToString().ToUpper() + @"}\Programmable";
            Registry.ClassesRoot.CreateSubKey(subkey);

            var key = Registry.ClassesRoot.OpenSubKey(@"CLSID\{" + type.GUID.ToString().ToUpper() + @"}\InprocServer32", true);
            if (key != null)
            {
                key.SetValue("", String.Format("{0}\\mscoree.dll", Environment.SystemDirectory), RegistryValueKind.String);
            }
        }

        [ComUnregisterFunction]
        public static void UnregisterFunction(Type type)
        {
            string subkey = @"CLSID\{" + type.GUID.ToString().ToUpper() + @"}\Programmable";
            Registry.ClassesRoot.DeleteSubKey(subkey, false);
        }

        public double JsAdd(double a, double b)
        {
            return a + b;
        }
    }
}

次のように、64ビットバージョンのregasmを使用してコンポーネントを登録するビルド後のイベントを設定しました: "%Windir%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm" "$(TargetPath)"

4

1 に答える 1

3

代わりに、Excel DNA プロジェクトを使用することにしました。カスタム関数を機能させるのに 5 分かかりました。ドキュメントも明確です (MSDN ドキュメントを調べた後はとても新鮮です)。

于 2013-01-15T13:49:19.553 に答える