Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向.NET(VSTO)中的电子表格添加按钮_C#_.net_Vsto_Excel Interop - Fatal编程技术网

C# 向.NET(VSTO)中的电子表格添加按钮

C# 向.NET(VSTO)中的电子表格添加按钮,c#,.net,vsto,excel-interop,C#,.net,Vsto,Excel Interop,使用VSTO或某些相关技术,是否可以通过编程将按钮嵌入Excel工作表的单元格中,并将其配置为在单击时调用C#函数 怎么做 谢谢。通过VSTO文档自定义(即附加了.Net代码的工作簿),您可以在运行时向项目的工作表添加和删除控件。以下代码说明了这一想法: public partial class Sheet1 { private void Sheet1_Startup(object sender, System.EventArgs e) { var but

使用VSTO或某些相关技术,是否可以通过编程将按钮嵌入Excel工作表的单元格中,并将其配置为在单击时调用C#函数

怎么做


谢谢。

通过VSTO文档自定义(即附加了.Net代码的工作簿),您可以在运行时向项目的工作表添加和删除控件。以下代码说明了这一想法:

 public partial class Sheet1
 {
     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!");
     }
您还可以通过VSTO外接程序将控件动态添加到文档中,使用以下代码(多亏了网站上的人):


查看更多信息。

以下是在VSTO加载项(Mathias答案的修改版本)中适用于我的代码:


按钮不能嵌入单元格中--按钮“浮动”。您最好在设计时将其与单元格对齐。是否尝试动态添加按钮?这将如何触发?C#it调用是否会在某个加载项中?这听起来像是一个复杂的设置,我不清楚你为什么要这样做;为什么不简单地用一个VSTO插件和一个菜单或功能区,使该功能可以从任何工作表中使用?@Jay:我可以接受。关于如何在工作表上方浮动按钮,有什么建议吗@Mathias:是的,我想动态添加按钮,C#回调将在外接程序中。我的外接程序的目的是帮助用户在电子表格中布局“表单”,我希望一些表单包含按钮。@McCoolBeth:我的回答有帮助吗?如果没有,还缺少什么?@Mathias:我需要从一个不依赖于任何特定文档的外接程序中使用它。您的答案可能适用于加载项以及文档自定义。当我回到相关项目时,我将尝试在几天内确定其适用性。
var workSheet = (Excel.Worksheet) sheet;
var vstoSheet = workSheet.GetVstoObject();
var button = vstoSheet.Controls.AddButton(50, 50, 100, 50, "Test");
button.Text = "Dynamic Button!";
using Excel = Microsoft.Office.Interop.Excel;
using ExcelTools = Microsoft.Office.Tools.Excel;

public void AddButtonToWorksheet()
{
  Excel.Worksheet worksheet = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet;
  ExcelTools.Worksheet vstoSheet = Globals.Factory.GetVstoObject(worksheet);

  Button button = new Button();
  button.Text = "Dynamic Button!";
  vstoSheet.Controls.AddControl(
    button, 50, 50, 100, 50, "TestButton");
}