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.Buttons(); Можете ли да опитате 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
Съжалявам, че не бях съвсем ясен - работният лист трябва да бъде екземпляр на вашия активен работен лист. Например от вашия пример: 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