2014-12-19 2 views
6

Я успешно реализован Microsoft образец «Пошаговое руководство: Синхронизация настраиваемой области задач с кнопкой ленточки», которая находится здесь: http://msdn.microsoft.com/en-us/library/bb608590.aspxПользовательские панели задач с несколькими открытыми тетрадями

Сначала я столкнулся с проблемой с панелью задач не показав, что оказалось результатом некоторого конфликта между моей надстройкой и Microsoft Analysis Toolpack. Как только я отключил Analysis Toolpack, пользовательская панель задач начала показывать и скрывать, как ожидалось.

Затем я написал код для изменения ячеек в выбранном диапазоне, когда пользователь нажимает кнопку. Казалось, что все работает отлично, пока я не открыл другую книгу! В окне каждой книги есть своя лента для добавления, но когда я нажал кнопку переключения, чтобы открыть/закрыть панель задач, она откроет/закрывает панель задач для первого созданного окна. Это независимо от того, в каком окне я нажимаю кнопку переключения.

Код создает экземпляр объекта CustomTaskPane в ThisAddIn_Startup (как в примере кода). Единственное, что я добавил на самом деле это действие кнопки в UserControl:

using xl = Microsoft.Office.Interop.Excel; 

namespace SynchronizeTaskPaneAndRibbon 
{ 
    public partial class TaskPaneControl : UserControl 
    { 
     public TaskPaneControl() 
     { 
      InitializeComponent(); 
     } 

     private void actionButton1_Click(object sender, EventArgs e) 
     { 
      xl.Range selection_rng = Globals.ThisAddIn.Application.Selection; 

      foreach (xl.Range cell in selection_rng.Cells) 
      { 
       if (cell.Value is string) 
       { 
        string v = cell.Value; 
        cell.Value = v + "*"; 
       } 
      } 
     } 
    } 
} 

Остальная часть кода просто, как в примере.

Есть ли способ изменить пример, чтобы он работал для открытия нескольких книг? Я хочу, чтобы один и тот же Add-In появлялся в каждом окне книги, с той же лентой и с той же пользовательской панелью. И, конечно же, для того, чтобы какие-либо действия с лентой (например, нажатие кнопки) направились к панели настраиваемых задач, которая появляется в том же окне.

ответ

0

Да, в MSDN есть еще один пример, который рассказывает об управлении настраиваемыми панелями задач в нескольких документах. Обратите внимание, что это с точки зрения Word/InfoPath, но основная идея будет такой же для Excel.

В общем, вам нужно добавить новую панель задач для текущей книги, если она ее не содержит. Поэтому переместите добавление настраиваемой логики панели задач из запуска Addin в ленту нажатием кнопки. Выполнение этого в событии нажатия кнопки дает вам возможность добавить новую панель задач в текущий документ при нажатии ленты.

Ссылка: https://msdn.microsoft.com/en-us/library/bb264456(v=office.12).aspx?f=255&MSPPError=-2147217396#Anchor_2

Собирают полезные фрагменты кода ниже в случае, если ссылка идет мертвой в будущем:

//Add a custom taskpane to active Word document 
public void AddCalendarTaskPane(Word.Document doc) 
{ 
    ctpCalendar = this.CustomTaskPanes.Add(new CalendarControl(), 
     "Select a date", doc.ActiveWindow); 
    ctpCalendar.Visible = true; 
} 

Вместо удаления, я рекомендую прятать taskpane переключая Visible флага ложного, но YMMV , Надеюсь это поможет.

Смежные вопросы