我正在尝试在 C# 中创建一个自定义 Excel 函数(我希望将报告数据从 Web API 提取到 Excel 中)。但是,当我进入 Excel 时,我可以添加新的自动化插件,但它列在“非活动应用程序插件”下,这里出了什么问题?
我根据这篇博文创建了一个 COM 自动化插件。我的源代码在 Github 上。
我正在使用 Visual Studio 2010 和 Excel 2010 64 位(版本 14.0)的 Window 7 64 位机器上工作。我的项目设置为 x64 构建配置,使用 .NET Framework 4。
我正在使用一个界面:
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)"