C#中的自定义Excel功能始终禁用

时间:2013-01-14 14:06:44

标签: c# com excel-addins excel-dna

我正在尝试在C#中创建自定义Excel函数(我希望将Web API中的报表数据提取到Excel中)。但是当我进入Excel时,我可以添加新的自动化插件,但它列在“非活动应用程序插件”下,这里出了什么问题?

我已经基于this blog post创建了一个COM自动化插件。我的源代码是on Github here

我正在使用Visual Studio 2010和Excel 2010 64位(版本14.0)开发Window 7 64位计算机。我的项目使用.NET Framework 4设置为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;
        }
    }
}

我已经设置了一个post-build事件来使用64位版本的regasm注册组件,如下所示: “%Windir%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm”“$(TargetPath)”

1 个答案:

答案 0 :(得分:3)

我决定使用the Excel DNA project代替。花了5分钟让我的自定义功能正常工作,清除文档(通过查看MSDN文档后如此清爽)。