c# excel создать кнопку на листе excel

Я пытаюсь добавить кнопку на лист Excel. Согласно примеру из Интернета, я пытаюсь сделать следующий код.

  using Excel = Microsoft.Office.Interop.Excel;
  using VBIDE = Microsoft.Vbe.Interop;


 private static void excelAddButtonWithVBA()
{
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlBook = xlApp.Workbooks.Open(@"PATH_TO_EXCEL_FILE");
Excel.Worksheet wrkSheet = xlBook.Worksheets[1];
Excel.Range range;

try
{
    //set range for insert cell
    range = wrkSheet.get_Range("A1:A1");

    //insert the dropdown into the cell
    Excel.Buttons xlButtons = wrkSheet.Buttons();
    Excel.Button xlButton = xlButtons.Add((double)range.Left, (double)range.Top, (double)range.Width, (double)range.Height);

    //set the name of the new button
    xlButton.Name = "btnDoSomething";
    xlButton.Text = "Click me!";
    xlButton.OnAction = "btnDoSomething_Click";

    buttonMacro(xlButton.Name, xlApp, xlBook, wrkSheet);
}
catch (Exception ex)
{
    Debug.WriteLine(ex.Message);
}
xlApp.Visible = true;

}

Но он продолжает говорить, что Excel не содержит кнопки

Какую ссылку я должен включить, чтобы использовать свойство Button?


person user3289230    schedule 03.11.2014    source источник
comment
wrkSheet.Кнопки(); Можете ли вы попробовать wrkSheet.Buttons; ?   -  person Eric    schedule 03.11.2014
comment
Рабочий лист не имеет функции кнопок. Какую ссылку мне нужно включить, чтобы использовать кнопки рабочего листа?   -  person user3289230    schedule 04.11.2014


Ответы (2)


Насколько я могу судить, Excel.Buttons и Excel.Button не существуют. Вместо этого предполагается, что правильной ссылкой является Microsoft.Office.Tools.Excel.Controls.Button (а не Microsoft.Office.Interop.Excel, как вы используете). Этот пример взят из источника ниже

    Excel.Application xlApp = new Excel.Application();
    Excel.Workbook xlBook = xlApp.Workbooks.Open(@"PATH_TO_EXCEL_FILE");
    Excel.Worksheet worksheet = xlBook.Worksheets[1];

    Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
    if (selection != null)
    {
        Microsoft.Office.Tools.Excel.Controls.Button button =
            new Microsoft.Office.Tools.Excel.Controls.Button();
        worksheet.Controls.AddControl(button, selection, "Button");
    }

Источник: Добавление элементов управления на рабочий лист во время выполнения в проекте уровня приложения http://msdn.microsoft.com/en-us/library/cc442817.aspx

person Lesley.Oakey    schedule 03.11.2014
comment
Спасибо за ответ. Я включил Microsoft.Office.Tools.Excel.v4.0.Utilities.dll, но не могу найти Microsoft.Office.Tools.Excel.Controls. Интересно, чего мне не хватает. - person user3289230; 04.11.2014
comment
Я нашел это! извините, я просто слепой. Благодарю вас! - person user3289230; 04.11.2014
comment
ОЙ. Я не могу найти рабочий лист. Элементы управления... Какую ссылку мне нужно включить? Я объявляю рабочий лист как Microsoft.Office.Interop.Excel.Worksheet. - person user3289230; 04.11.2014
comment
Извините, что я не совсем ясно выразился - рабочий лист должен быть экземпляром вашего активного рабочего листа. EG из вашего примера: Excel.Worksheet worksheet = xlBook.Worksheets[1]; я тоже обновил ответ - person Lesley.Oakey; 06.11.2014
comment
где я могу получить Microsoft.Office.Tools.Excel.Controls.Button? - person ; 08.01.2018

Использование метода Lesley.Oakey требует использования методов расширения VSTO. в Microsoft.Tools.Office.Excel.

Если вы их не используете, вы не сможете получить доступ к свойству Worksheet.Controls.

Лучше всего просто использовать контейнер Worksheet.Shapes и добавить новую фигуру. Здесь есть отличный пост об этом:

Добавить код excel vba к кнопке с помощью c#

person stuzor    schedule 05.04.2015