9

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

如何?

谢谢。

4

2 回答 2

11

通过 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 论坛上的人):

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

查看Eric Carter 的这篇文章了解更多信息。

于 2010-06-23T05:02:56.520 回答
3

这是在 VSTO 插件中适用于我的代码(Mathias 答案的修改版本):

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");
}
于 2016-06-21T16:00:55.040 回答