代码之家  ›  专栏  ›  技术社区  ›  jamiei

VSTO以编程方式添加基于现有工作表的新工作表

  •  3
  • jamiei  · 技术社区  · 15 年前

    我现在有一个 C# Workbook-level Office 2007 Addin 那有 Worksheet 在设计时添加,其中我已将方法和属性添加到 工作表 派生类。

    我希望能够通过编程制作一个新的工作表, 克隆 , 继承 或以其他方式拥有此的方法和事件处理程序 现有工作表类 自动地。

    如果这是可以实现的,那么有人能概述这是如何实现的吗?尽管任何.NET代码都是可接受的,但演示代码最好是C。

    谢谢你抽出时间。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Nick Haslam    15 年前

    好的,好问题,我会留意这里发生了什么。

    几个月前,我遇到了类似的问题,需要在动态创建的工作表上创建代码和事件。然而,为了能够做到这一点,我最终在工作表中创建了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);
    
    
        2
  •  1
  •   jamiei    15 年前

    我现在得出的结论是,在我所寻找的现有状态下复制这些类实际上是不可行的。

    根据 Host Items and Host Controls Overview :在文档级加载项中,无法以编程方式创建宿主项,但只能在设计时创建。这是进一步加强 explanation of the programmatic limitations 宿主项和宿主控件,尤其是文档级加载项。