我在附加建立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插件。
我會考慮查看http://exceldna.codeplex.com/ - 它有很多功能和相當不錯的設計。另外它更快,因爲插件是基於Xll而不是COM。 – weismat
好吧,你正在製作一個VSTO加載項,它已經很好的結構化了,所以我不明白你的問題。當您將一個按鈕添加到帶有事件的功能區時,您將被重定向到存儲所有按鈕事件的解決方案中的正確位置(代碼塊)。當創建一個CustomTaskPane時,你很可能會添加一個文件夾CustomTaskPane來處理與CTP相關的任何事情......我真的不明白你想要在這裏重新構造什麼......你是否真的建立了一個並熟悉當前VS建議的解決方案和代碼結構?你不喜歡它什麼 – 2014-03-12 13:45:48
@mehow我根本沒有使用VSTO,這是一個普通的COM插件。 –