Добавление кнопок в электронные таблицы в .NET (VSTO) - PullRequest
9 голосов
/ 15 июня 2010

Используя VSTO или некоторые связанные технологии, возможно ли программно встроить кнопку в ячейку листа Excel и настроить ее для вызова функции C # при нажатии?

Как?

Спасибо.

Ответы [ 2 ]

10 голосов
/ 23 июня 2010

С помощью настройки документа 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!";

Проверьте этот пост Эрика Картера для получения дополнительной информации.

1 голос
/ 21 июня 2016

Вот код, который работает для меня в VSTO Add-in (модифицированная версия ответа Матиаса):

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");
}
...