2010-06-15 35 views
9

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

怎么样?

谢谢。

+0

A键不能嵌入在一个细胞 - 按钮“浮动”。您可以做的最好的做法是在设计时将其与单元对齐。 – Jay 2010-06-15 16:21:07

+0

你想动态添加一个按钮吗?这将如何触发?并且它会调用的C#是否在某个加载项中?这听起来像一个复杂的设置,我不清楚你为什么要这么做;为什么不简单地有一个VSTO加载项,以及一个菜单或功能区,可以在任何工作表中使用该功能? – Mathias 2010-06-18 05:19:08

+0

@Jay:我可以接受这一点。有关如何在工作表上方浮动按钮的任何提示? @Mathias:是的,我想动态地添加这些按钮,并且C#回调函数将在一个加载项中。我的加载项的目的是为了帮助用户在电子表格中布置“表单”,并且我希望某些表单可以包含按钮。 – mcoolbeth 2010-06-18 18:20:05

回答

10

通过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 forum人们为一个)控件添加插件,:

var workSheet = (Excel.Worksheet) sheet; 
var vstoSheet = workSheet.GetVstoObject(); 
var button = vstoSheet.Controls.AddButton(50, 50, 100, 50, "Test"); 
button.Text = "Dynamic Button!"; 

检查this post by Eric Carter了解更多信息。

0

这里是一个在VSTO工作对我来说加载(马蒂亚斯的回答修改后的版本)的代码:

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"); 
} 
相关问题