C# VSTO添加的控件在不使用外接程序的情况下工作

C# VSTO添加的控件在不使用外接程序的情况下工作,c#,visual-studio-2013,excel-2010,vsto,C#,Visual Studio 2013,Excel 2010,Vsto,假设您有一个Excel VSF插件来创建控件。有没有办法使该控件在没有外接程序的Excel实例中工作 问题的简化:外接程序创建一个按钮 private void Sheet1_Startup(object sender, System.EventArgs e) { var button = this.Controls.AddButton(10, 10, 50, 50, "My Button"); button.Text = "My Button"; button.Cli

假设您有一个Excel VSF插件来创建控件。有没有办法使该控件在没有外接程序的Excel实例中工作

问题的简化:外接程序创建一个按钮

private void Sheet1_Startup(object sender, System.EventArgs e)
 {
    var button = this.Controls.AddButton(10, 10, 50, 50, "My Button");
    button.Text = "My Button";
    button.Click += new EventHandler(button_Click);
 }

 void button_Click(object sender, EventArgs e)
 {
    MessageBox.Show("I was clicked!");
 }
然后使用该按钮保存文档并通过电子邮件发送给其他用户。当其他用户打开文档并单击该按钮时,不会发生任何事情


如何使按钮在其他人的计算机上工作?

我是在Word上开发的,不是Excel,但在我看来,您的选项是:

  • 创建要加载项的文档/模板级别。基于模板(xltm)创建的每个工作簿都可以有相同的按钮,它可以调用宏,也可以只运行代码。这相当简单,但是您的收件人也需要有外接程序
  • 本质上与#1相同,但它是应用程序级的,因此它仍然必须安装在收件人的计算机上,但按钮始终在那里,他们不必自己制作。如果只想在某些工作簿中显示,则可以有条件地显示它
  • 在工作簿中创建宏,保存并从工作簿中删除VSTO自定义设置,然后告诉收件人运行宏。他们可以在自定义功能区选项卡上添加一个按钮来运行它,但您不能自动创建按钮,因为不支持通过代码更改功能区。它还可以在所有文档中共享,因此它将显示在每个excel文档中,具体取决于它的创建方式(您希望使它在excel中与Normal.dotm模板等效)。他们做不到,只是偶尔出现
  • 这与#3非常相似,但宏的交付方式可能对您更有意义。Word可以在文档中创建宏并将其放置在启动文件夹中,该用户在该系统上打开的所有文档都可以使用该宏。Excel也有类似的功能,比如。您可能会找到一种方法,将此个人工作簿提供给已包含宏的收件人。他们仍然需要自己创建任何功能区按钮

  • 您似乎真的不想让用户拥有外接程序,因此#3或#4似乎是最好的选择。

    VSTO外接程序不能作为Excel文件的一部分提供。您需要在需要运行此功能的所有计算机上安装此加载项。然后,也许有一种方法可以让一个按钮将工作簿转换为宏工作簿,并插入一个引用为宏的按钮?实际上。。。使用vsto发现了这个重新添加宏:因为我找不到Microsoft文档说明这是不可能的,所以我很想看到文档说它不起作用。我当然也会接受这个回答(“不”)。