none
c# 寫給 excel 用的 dll RRS feed

  • 問題

  • 我之前有在本版問過

    不好意思 又遇到問題

    可是 我試過 用vs2005 去寫

    c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\RegAsm /codebase FtradeCOM.dll

    會出現 沒有 .net 組件的錯誤

    在上網查  有guid 的寫法

    可是 不知 怎麼使用在  excel 中

    到底 什麼才是正確的寫法呢  ?!!

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    using FTradeLibrary.Order;
    
    namespace FtradeCOM
    {
        [ClassInterface(ClassInterfaceType.AutoDual)]
        public class SendClass
        {
            clsMktOrdQSet oMktOrdQSet = new clsMktOrdQSet();
            clsFOOrdQSet oFOOrdQSet = new clsFOOrdQSet();
            public void SendOrder(string ProductType, string TradeType, string FunCode, string ordSymbolId, string ordOrderNo, string ordBSCode, double ordPrice, double ordQty, string ordCond, string ordOffSet, string ordAE, string ordNetId, string ordOrderType)
            {
                try
                {
                    switch (TradeType)
                    {
                        case "1":
                        case "2":
                            oFOOrdQSet.QueueSet(ProductType, TradeType, FunCode, ordSymbolId, ordOrderNo, ordBSCode, ordPrice, ordQty, ordCond, ordOffSet, ordAE, ordNetId, ordOrderType);
                            break;
                        default:
                            break;
                    }
    
                }
    
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
    
                }
    
            }
    
            [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");
            }
    
    
        }
    }
    2010年4月13日 上午 07:58

解答

  • 很抱歉  各位先進

    我知道這個問題 在版上 有發問過

    很謝謝 大家的回答

    因為  我查了幾個作法  都不太一樣  其實 我的問題大概如下

    http://blog.miniasp.com/post/2008/07/How-to-write-COM-component-using-NET.aspx

    若用這篇文章去做  比較簡單  但我遇到了一個問題  我找不到  .net 1.x 以上版本的   gacutil.exe  所以  我用vs2005 開發 就掛點

    就不能知道  是否能在  excel vba 中去使用

    http://www.csharphelp.com/2006/08/building-com-objects-in-c/

    這一篇  感覺比較複雜  它又有用到 GUID  

    到到最後 是用vc++去  驗證那個COM 元件

    所以 我也不知 如何去註冊 與 反註冊

    而 這一篇

    http://blogs.msdn.com/eric_carter/archive/2004/12/01/273127.aspx

    就如我所問的  要如何註冊與反註冊  在文章中我沒找到相關的解釋

    因為 開發這個東西  又會 一直修改會有版本問題

    所以 我會一直很想知道  反註冊的事   當然 要先能註冊

     

    很抱歉一直打擾大家這個問題

    請有相關經驗的人 分享 你們的解決方法

    非常之感謝

     

     

     

    • 已標示為解答 布利 2013年6月8日 上午 03:57
    2010年4月14日 下午 03:35

所有回覆

  • 我之前有在本版問過

    不好意思 又遇到問題

    可是 我試過 用vs2005 去寫

    c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\RegAsm /codebase FtradeCOM.dll

    會出現 沒有 .net 組件的錯誤

    在上網查  有guid 的寫法

    可是 不知 怎麼使用在  excel 中

    到底 什麼才是正確的寫法呢  ?!!

    using System;
    
    using System.Collections.Generic;
    
    using System.Text;
    
    using System.Runtime.InteropServices;
    
    using FTradeLibrary.Order;
    
    
    
    namespace FtradeCOM
    
    {
    
        [ClassInterface(ClassInterfaceType.AutoDual)]
    
        public class SendClass
    
        {
    
            clsMktOrdQSet oMktOrdQSet = new clsMktOrdQSet();
    
            clsFOOrdQSet oFOOrdQSet = new clsFOOrdQSet();
    
            public void SendOrder(string ProductType, string TradeType, string FunCode, string ordSymbolId, string ordOrderNo, string ordBSCode, double ordPrice, double ordQty, string ordCond, string ordOffSet, string ordAE, string ordNetId, string ordOrderType)
    
            {
    
                try
    
                {
    
                    switch (TradeType)
    
                    {
    
                        case "1":
    
                        case "2":
    
                            oFOOrdQSet.QueueSet(ProductType, TradeType, FunCode, ordSymbolId, ordOrderNo, ordBSCode, ordPrice, ordQty, ordCond, ordOffSet, ordAE, ordNetId, ordOrderType);
    
                            break;
    
                        default:
    
                            break;
    
                    }
    
    
    
                }
    
    
    
                catch (Exception ex)
    
                {
    
                    throw new Exception(ex.Message);
    
    
    
                }
    
    
    
            }
    
    
    
            [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");
    
            }
    
    
    
    
    
        }
    
    }
    
    


    http://www.codeproject.com/KB/COM/com_object_in_c_.aspx

    類似以上這個網址的用法

    它只有說怎麼在vc++使用

    但我就不知如何去註冊  在excel中使用

    可以有人幫忙嘛?!

    2010年4月13日 上午 08:09
  • Writing user defined functions for Excel in .NET

    http://blogs.msdn.com/eric_carter/archive/2004/12/01/273127.aspx

    這篇有試過嗎...

    2010年4月13日 上午 08:18
  • Writing user defined functions for Excel in .NET

    http://blogs.msdn.com/eric_carter/archive/2004/12/01/273127.aspx

    這篇有試過嗎...


    謝謝您

    可是 使用者 還有在用excel 2000

    還有  這篇  的作法 可以使用在vba 中嘛

    因為  我找不到  AutomationServers

    呼  請再幫幫我的忙囉~~

    2010年4月13日 上午 08:36
  • Excel 2003(2000/XP 應該相同):

    開啟Excel -> 選工具 -> 選增益集 -> 選自動化

    補充: Excel2000 不能直接在儲存格使用, 必須透過VBA

    (參考 此篇 )


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

     

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

     

    在標題或文章註明很急
    不會增加網友回覆速度
    • 已編輯 Alex_Lee 2010年4月13日 上午 09:11
    2010年4月13日 上午 08:49
  • Excel 2003(Excel 2000 /XP 應該相同):

    開啟Excel -> 選工具 -> 選增益集 -> 選自動化

     


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

     

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

     

    在標題或文章註明很急
    不會增加網友回覆速度


    這篇文張  我看完了  還是不知要如何註冊耶

    因為 要拿到 使用者端 

    它好像只有寫說 在vs2005 build 就好了

    可是 那是本機端啊~~~

    2010年4月13日 上午 09:07
  • Writing user defined functions for Excel in .NET

    http://blogs.msdn.com/eric_carter/archive/2004/12/01/273127.aspx

    這篇有試過嗎...


    Hi Joe大大

    非常感謝您的幫忙

    還有沒有 其它參考資料  讓我看呢

    非常謝謝你  因為 我上google  都查不太到 

     

    2010年4月13日 上午 11:48
  • 很抱歉  各位先進

    我知道這個問題 在版上 有發問過

    很謝謝 大家的回答

    因為  我查了幾個作法  都不太一樣  其實 我的問題大概如下

    http://blog.miniasp.com/post/2008/07/How-to-write-COM-component-using-NET.aspx

    若用這篇文章去做  比較簡單  但我遇到了一個問題  我找不到  .net 1.x 以上版本的   gacutil.exe  所以  我用vs2005 開發 就掛點

    就不能知道  是否能在  excel vba 中去使用

    http://www.csharphelp.com/2006/08/building-com-objects-in-c/

    這一篇  感覺比較複雜  它又有用到 GUID  

    到到最後 是用vc++去  驗證那個COM 元件

    所以 我也不知 如何去註冊 與 反註冊

    而 這一篇

    http://blogs.msdn.com/eric_carter/archive/2004/12/01/273127.aspx

    就如我所問的  要如何註冊與反註冊  在文章中我沒找到相關的解釋

    因為 開發這個東西  又會 一直修改會有版本問題

    所以 我會一直很想知道  反註冊的事   當然 要先能註冊

     

    很抱歉一直打擾大家這個問題

    請有相關經驗的人 分享 你們的解決方法

    非常之感謝

     

     

     

    • 已標示為解答 布利 2013年6月8日 上午 03:57
    2010年4月14日 下午 03:35