我正在尝试在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)”