Метод контроля рабочего листа недоступен
Я столкнулся со странной проблемой в программировании надстройки для Excel; Я хочу добавить элементы управления в Excel, я использовал этот код, вдохновляющий https://msdn.microsoft.com/en-us/library/cc442817.aspx
private void button_Click(object sender, RibbonControlEventArgs e)
{
var worksheet = (Worksheet)Globals.ThisAddIn.Application.ActiveSheet;
{
const string buttonName = "MyButton";
if (((RibbonCheckBox)sender).Checked)
{
var selection = Globals.ThisAddIn.Application.Selection as Range;
if (selection != null)
{
var button =
new Microsoft.Office.Tools.Excel.Controls.Button();
worksheet.Controls.AddControl(button, selection, buttonName);
}
}
else
{
worksheet.Controls.Remove(buttonName);
}
}
}
но метод управления рабочим листом недоступен, и я не могу получить к нему доступ, я добавил сборку Microsoft.Office.Tools.Excel.v4.0.Utilities.dll и следующие инструкции
using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Tools.Ribbon;
using Office = Microsoft.Office.Core;
кстати я использую офис 2007 и vs 2013, поэтому я изменил версию офиса на 12 в DebugInfoExeName.
2 ответа
Решение
Вам необходимо использовать метод GetVstoObject, чтобы получить элемент хоста, представляющий рабочую таблицу в книге, а затем добавить элемент управления Button в текущую выбранную ячейку.
private void Button_Click(object sender, RibbonControlEventArgs e)
{
Worksheet worksheet = Globals.Factory.GetVstoObject(
Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
string buttonName = "MyButton";
if (((RibbonCheckBox)sender).Checked)
{
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, buttonName);
}
}
else
{
worksheet.Controls.Remove(buttonName);
}
}
Использование правильных пространств имен решило мою проблему, которая похожа:
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Tools.Excel;