2014-12-19 17 views
6

ho implementato con successo l'esempio di Microsoft "Soluzione: Sincronizzazione di un riquadro attività personalizzato con un nastro del tasto" trovato qui: http://msdn.microsoft.com/en-us/library/bb608590.aspxpersonalizzato riquadro attività con più cartelle di lavoro aperte

Inizialmente mi sono imbattuto in un problema con il riquadro attività non mostrato, che è risultato essere il risultato di un conflitto tra il mio componente aggiuntivo e il "Toolpack di analisi" di Microsoft. Una volta disabilitato Analysis Toolpack, il riquadro delle attività personalizzate ha iniziato a mostrare e nascondere come previsto.

Ho quindi scritto del codice per modificare le celle in un intervallo selezionato quando l'utente preme un pulsante. Sembrava funzionare bene, fino a quando non ho aperto un'altra cartella di lavoro! Ogni finestra della cartella di lavoro ha il proprio nastro aggiuntivo, ma quando ho fatto clic sul pulsante di attivazione/disattivazione per aprire/chiudere il riquadro delle attività personalizzate, si apriva/chiudeva il riquadro delle attività personalizzate per la prima finestra creata. Questo è indipendentemente da quale finestra faccio clic sul pulsante di attivazione.

Il codice crea un'istanza dell'oggetto CustomTaskPane in ThisAddIn_Startup (proprio come nel codice di esempio). L'unica cosa che ho veramente aggiunto è l'azione pulsante nella 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 + "*"; 
       } 
      } 
     } 
    } 
} 

Il resto del codice è così come è l'esempio.

C'è un modo per modificare l'esempio in modo che funzioni per più cartelle di lavoro aperte? Quello che voglio è che lo stesso componente aggiuntivo appaia in ogni finestra della cartella di lavoro, con la stessa barra multifunzione e lo stesso pannello personalizzato. E, naturalmente, per fare in modo che alcune azioni del nastro (come la pressione di un pulsante) si dirigano verso il riquadro delle attività personalizzate che appare all'interno della stessa finestra.

risposta

0

Sì, c'è un altro esempio su MSDN che parla della gestione di gruppi di lavoro personalizzati in più documenti. Si noti che questo è dal punto di vista di Word/InfoPath ma l'idea di base sarà la stessa anche per Excel.

In linea generale, è necessario aggiungere un nuovo blocco di attività per la cartella di lavoro corrente, se non ne ha uno. Quindi sposta l'aggiunta della logica del task task personalizzato dall'avvio di Addin all'evento clic del pulsante della barra multifunzione. Facendo questo in evento click del pulsante ti dà la possibilità di aggiungere un nuovo riquadro di attività al documento corrente quando si fa clic sulla barra multifunzione.

Link: https://msdn.microsoft.com/en-us/library/bb264456(v=office.12).aspx?f=255&MSPPError=-2147217396#Anchor_2

Mettere i frammenti di codice utili di seguito nel caso in cui il collegamento si esaurisce in futuro:

//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; 
} 

Invece di rimuovere, mi consiglia di nascondere il TaskPane commutando Bandiera Visibile a false, ma YMMV . Spero che questo ti aiuti.

Problemi correlati