Я пытаюсь добавить кнопку на листе 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
Заранее спасибо.
Насколько я могу судить, 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
Используя метод Lesley.Oakey, вы должны использовать методы расширения VSTO в Microsoft.Tools.Office.Excel.
Если вы их не используете, вы не сможете получить доступ к свойству Worksheet.Controls.
Лучше всего использовать контейнер Worksheet.Shapes и добавить новую форму. Там хорошая статья об этом здесь: