excel-dna创建comserver

本文利用excel-dna实现comserver.在excel vba里面调用。我的office是64位的,我只生成64位的comserver.

1.建立类库。

安装exceldna包。

3编写代码。代码比较好理解。前半部分建立一个com互操作的类COMLibrary.后面的部分就是在excel启动和关闭时候的插件自注册自销部分代码。

using System;
using ExcelDna.Integration;
using ExcelDna.ComInterop;
using System.Runtime.InteropServices;
//
namespace XLServer
{
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class COMLibrary
    {
        public double add(double x, double y)
        {
            return x + y;
        }
    }
    //
    [ComVisible(false)]
    class ExcelAddin : IExcelAddIn
    {
        public void AutoOpen()
        {
            ComServer.DllRegisterServer();
        }
        public void AutoClose()
        {
            ComServer.DllUnregisterServer();
        }
    }
}

 在配置文件里设置comserver="true"

生成解决方案。

下面导出dll的类型库。我上面截图里面的tlb是我已经操作实验生成好的截图。实际中并没有生成的。下面讲下怎么生成的。我是64位的dll.就选择x64的本机工具。32位的dll选择x86 native tools command..。

 进入生成dll的目录。然后tlbexp命令导出tlb类型库。可以看到出现报错,就是找不到ExcelDna.Integration.dll。

去看下生成目录里面确实没有.别慌。去引用里改下复制到本地的属性为true然后重新生成解决方案就可以了。当然你也可以根据引用路径复制到生成的文件夹里,也是可以的。

重新在命令行里导出类型库。可以看到导出成功了。

下面看下怎么在excel dna里面怎么使用。

首先加载64位的xll。可以放到excel常用的默认加载路径方便管理点。

dll和tlb只要在一起哪里都行。如下图vba工程引用里倒入之前生成的类型库。

我们去对象浏览器看下xlserver这个引用。可以看到C#里创建的类以及add函数了

下面我们来代码测试使用下。

Sub x()
Dim s As New COMLibrary
Debug.Print s.Add(3.5, 16.5)
End Sub

大功告成,达到了预期的目标。

 

猜你喜欢

转载自blog.csdn.net/qq_24499417/article/details/105079648
DNA