制作一个MS Excel用户自定义函数

4
我将尝试为MS Excel创建一个用C#编写的用户自定义函数。 但无论我尝试什么方法,当我尝试将Add-in添加到Excel中时,我总是会遇到臭名昭著的“您选择的文件不包含新的自动化服务器,或者您没有足够的权限注册自动化服务器”错误。 以下是我从在线示例中获取的代码,只是为了尝试一下:
// 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 x64Excel 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. 我已经两个晚上没睡觉了,所以可能会以非常愚蠢的方式搞砸一些东西。如果有人能测试这段代码是否有效,并告诉我他们的项目设置,那就太好了。

1
我忘了提到我已经做了。所以是的,但没有成功。 - Janis Vepris
1
http://www.codeproject.com/Articles/7753/Create-an-Automation-Add-In-for-Excel-using-NET 似乎可以解决你的问题,希望能有所帮助! - JuStDaN
@JuStDan 感谢你,但我问题中的代码示例确切地针对那个页面,并且我已经尝试过他们的解决方案。 - Janis Vepris
@Janisimo,你是否将汇编代码编译为AnyCPU平台? - user626528
@Janisimo,我相信你应该这样做,但尝试不同的选项可能会有帮助。还要记得使用与你的Excel位数匹配的regasm版本(32位或64位)。 - user626528
显示剩余2条评论
1个回答

2

非常感谢您的建议。我以前使用过这个工具成功地创建了XLL UDF,它很棒。但问题是我有一个大学作业,他们要求我创建一个COM自动化插件,这是必须的 :( - Janis Vepris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接