我将尝试为MS Excel创建一个用C#编写的用户自定义函数。
但无论我尝试什么方法,当我尝试将Add-in添加到Excel中时,我总是会遇到臭名昭著的“您选择的文件不包含新的自动化服务器,或者您没有足够的权限注册自动化服务器”错误。
以下是我从在线示例中获取的代码,只是为了尝试一下:
我在 Excel 2013 x64 和 Excel 2010 x86 上使用了 MS Visual Studio 2012,但以下解决方案都没有成功:
P.S. 我已经两个晚上没睡觉了,所以可能会以非常愚蠢的方式搞砸一些东西。如果有人能测试这段代码是否有效,并告诉我他们的项目设置,那就太好了。
// C#
using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace AutomationAddin
{
[ClassInterface(ClassInterfaceType.AutoDual)]
public class MyUdf
{
public MyUdf()
{
}
public double addMeTest(double x, double y)
{
return x + y;
}
[ComRegisterFunctionAttribute]
public static void RegisterFunction(Type t)
{
Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(
"CLSID\\{" + t.GUID.ToString().ToUpper() +
"}\\Programmable");
}
[ComUnregisterFunctionAttribute]
public static void UnregisterFunction(Type t)
{
Microsoft.Win32.Registry.ClassesRoot.DeleteSubKey(
"CLSID\\{" + t.GUID.ToString().ToUpper() +
"}\\Programmable");
}
}
}
我在 Excel 2013 x64 和 Excel 2010 x86 上使用了 MS Visual Studio 2012,但以下解决方案都没有成功:
- 在代码中使用 [ClassInterface(ClassInterfaceType.AutoDual)]
- 在代码中使用 [ComRegisterFunctionAttribute] 和 [ComUnregisterFunctionAttribute]
- 执行 regasm /codebase 命令也没有效果
- 打开/关闭“注册COM互操作”(在VS作为管理员运行时进行构建)
- 将 [assembly: ComVisible(true)] 设置为 true
- 尝试从网上找到的不同代码示例
- 阅读了这篇 stackoverflow 文章:如何在自动化服务器列表中安装和注册用VB.NET编写的Excel COM服务器?
- 我还同时尝试了以上所有方法 - 还是没有成功
- 以管理员身份运行Excel
P.S. 我已经两个晚上没睡觉了,所以可能会以非常愚蠢的方式搞砸一些东西。如果有人能测试这段代码是否有效,并告诉我他们的项目设置,那就太好了。