2009-10-20 33 views
3

我目前有一個C# Workbook-level Office 2007 Addin,它在設計時添加了Worksheet,我已在Worksheet派生類中添加了方法和屬性。VSTO以編程方式基於現有工作表添加新工作表

我希望能夠以編程方式使一個新的工作表克隆繼承或以其他方式自動擁有該現有工作表類的方法和事件處理。

如果可以實現,那麼請有人概述如何實現這一目標?雖然任何.NET代碼都是可以接受的,但C#演示代碼將會更好。

謝謝你的時間。

回答

1

我現在得出的結論是,在現有狀態下複製這些類實際上並不可行,因爲我正在尋找。

根據Host Items and Host Controls Overview:在文檔級別加載項中,宿主項目不能以編程方式創建,而只能在設計時創建。主機項目和主機控件的進一步explanation of the programmatic limitations對此進一步加強,特別是對於文檔級插件。

+0

同意,我不認爲你可以做OP所要求的 - 重複現有的工作表並在運行時擴展它。但根據http://tinyurl.com/bqej98z,您可以創建新的工作表並獲取創建的主機項目。 – gap 2012-08-16 02:24:17

2

好的,好問題,我會密切關注這裏發生的事情。

幾個月前,我有類似的問題,需要在動態創建的工作表上創建代碼和事件。然而,爲了能夠做到這一點,我最終在表單中創建了VBA腳本對象。

所以該過程是:

  1. 用戶在Excel點擊次數按鈕
  2. C#進程創建新表
  3. C#進程片創建VBA對象並創建事件等

    oBook = objExcel.ActiveWorkbook; 

    oModule = oBook.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule); 

    string sCode = "sub myVBASub()\r\n"+ 
      "msgbox("Hello")\r\n"+ 
      "End Sub\r\n"; 

    oModule.CodeModule.AddFromString(sCode); 

+0

老尼克:感謝分享,我沒有想過這樣做,我想唯一的問題是,你不能從你的C#插件調用這些事件嗎? – jamiei 2009-10-20 19:11:12

+0

可能....雖然我所做的唯一交互是通過添加到excel 2003的菜單,但是,這(http://tinyurl.com/yfs665r)意味着您可以連接到一些控件,因爲VSTO運行在相同的命名空間。 – 2009-10-20 20:25:44

相關問題