2014-03-12 16 views
1

我在附加建立COM爲Excel 2007及更高版本,這將是在這個意義上的應用程序:設計結構爲C#的Excel COM加載項

  • 它在功能區中自己的標籤與控制按鈕它的操作(例如「創建新的計劃工作簿」/「刷新工作簿」等)
  • 它將從Excel(應用程序和工作簿)中捕捉事件並對其執行操作。
  • 它應該有一個任務窗格,它將基於上下文,並將從我的插件發送給它的數據。

爲了支持這一點,我想構建這樣的方式,我可以relativley很容易地修改它在未來的代碼(例如,添加功能區上的一個新的按鈕),並沒有意大利麪條隨處可見。

我最初的想法是創造這將是我的「加載項應用程序」,並與Excel應用程序本身初始化這一點,例如一個單例類:

public class Connect : Extensibility.IDTExtensibility2 { 
    private Excel.Application _excelApplication; 
    private MyAddinApplication _myAddinApplication; 

    public void OnConnection(Object application,...) { 
     _excelApplication = (Excel.Application)application; 
     _myAddinApplication = new MyAddinApplication(_excelApplication); 
    } 
} 

這MyAddinApplication類會又陷Excel的事件(例如如打開工作簿,關閉等),然後相應地對其執行操作。它還會捕獲任何Ribbon事件或回調,然後基於命令模式觸發操作。

我的問題,這是一個Excel COM插件的合理方法? 將Excel應用程序封裝在由我的「Addin Application」類引用的單獨「事件處理程序」類中會更好嗎?我沒有真正看到過我的研究中的一個複雜的COM插件,只有那些有一個或兩個按鈕或沒有捕獲任何事件的COM插件。

+0

我會考慮查看http://exceldna.codeplex.com/ - 它有很多功能和相當不錯的設計。另外它更快,因爲插件是基於Xll而不是COM。 – weismat

+0

好吧,你正在製作一個VSTO加載項,它已經很好的結構化了,所以我不明白你的問題。當您將一個按鈕添加到帶有事件的功能區時,您將被重定向到存儲所有按鈕事件的解決方案中的正確位置(代碼塊)。當創建一個CustomTaskPane時,你很可能會添加一個文件夾CustomTaskPane來處理與CTP相關的任何事情......我真的不明白你想要在這裏重新構造什麼......你是否真的建立了一個並熟悉當前VS建議的解決方案和代碼結構?你不喜歡它什麼 – 2014-03-12 13:45:48

+0

@mehow我根本沒有使用VSTO,這是一個普通的COM插件。 –

回答

1

這裏有一個(有點複雜)的Excel插件,你可以看看。作者描述了他如何將他的解決方案組織到不同的項目中,我同意他的大部分決定。他分開從用戶界面/ Excel中域邏輯並增加了單元測試項目,一個項目,該項目自舉他的整個插件:

http://www.clear-lines.com/blog/post/VSTO-solution-organization.aspx

的源代碼可以在這裏找到: http://vstostocks.codeplex.com/

這是一個VSTO解決方案,但您可以輕鬆將相同的原則應用於普通的COM插件。它也非常類似於你的項目。

如果不知道你的具體問題,很難給出指導方針。我認爲,如果你堅持主要的指導方針,像是SOLID這樣的OO設計,編寫乾淨的代碼,你應該沒問題。