2015-04-17 2 views
0

Я столкнулся с нечетной проблемой в прогграммирующей надстройке для 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 и против 2013, так что я изменил офис версию до 12 в DebugInfoExeName.

ответ

0

Чтобы получить элемент хоста, который представляет рабочий лист в книге, вам необходимо использовать метод 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); 
    } 
}