Персонализиран прозорец на задачите с множество отворени работни книги

Успешно внедрих примера на Microsoft „Преглед: Синхронизиране на персонализиран прозорец на задачите с бутон на лентата“, намерен тук: http://msdn.microsoft.com/en-us/library/bb608590.aspx

Първоначално се натъкнах на проблем с това, че прозорецът на задачите не се показва, което се оказа резултат от някакъв конфликт между моята добавка и „Analysis Toolpack“ на Microsoft. След като деактивирах 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 + "*";
                }
            }
        }
    }
}

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

Има ли начин да промените примера, така че да работи за отворени множество работни книги? Това, което искам, е една и съща добавка да се показва във всеки прозорец на работна книга, с една и съща лента и със същия персонализиран панел. И, разбира се, всички действия на лентата (като натискане на бутон) да се насочват към персонализирания прозорец на задачите, който се появява в същия прозорец.


person GaryP    schedule 19.12.2014    source източник


Отговори (1)


Да, има друг пример в 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;
}

Вместо да премахвате, препоръчвам да скриете прозореца на задачите, като превключите Visible flag на false, но YMMV. Надявам се това да помогне.

person Mr.Hunt    schedule 10.12.2015