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

大功告成,達到了預期的目標。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章