Procedura dettagliata: Aggiungere controlli a un foglio di lavoro in fase di esecuzione nel progetto del componente aggiuntivo VSTO

È possibile aggiungere controlli a qualsiasi foglio di lavoro aperto mediante un componente aggiuntivo VSTO per Excel. Questa procedura dettagliata illustra come usare la barra multifunzione per consentire agli utenti l'aggiunta di oggetti Button, NamedRange e ListObject a un foglio di lavoro. Per informazioni, vedere Aggiungere controlli ai documenti di Office in fase di esecuzione.

Si applica a: le informazioni contenute in questo argomento si applicano ai progetti di componente aggiuntivo VSTO per Excel. Per altre informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazioni di Office.

In questa procedura dettagliata sono illustrati i task seguenti:

  • Creazione di un'interfaccia utente per l'aggiunta di controlli al foglio di lavoro.

  • Aggiunta di controlli al foglio di lavoro.

  • Rimozione di controlli dal foglio di lavoro.

    Nota

    I nomi o i percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni, vedere Personalizzare l'IDE.

Prerequisiti

Per completare questa procedura dettagliata, è necessario disporre dei componenti seguenti:

Creare un nuovo progetto di componente aggiuntivo VSTO di Excel

Creare innanzitutto un progetto di componente aggiuntivo VSTO per Excel.

Per creare un nuovo progetto di componente aggiuntivo VSTO per Excel

  1. In Visual Studio creare un progetto di componente aggiuntivo VSTO di Excel con il nome ExcelDynamicControls. Per altre informazioni, vedere How to: Create Office Projects in Visual Studio.

  2. Aggiungere un riferimento all'assembly Microsoft.Office.Tools.Excel.v4.0.Utilities.dll . Tale riferimento è necessario per aggiungere a livello di codice un controllo Windows Form al foglio di lavoro più avanti in questa procedura dettagliata.

Fornire un'interfaccia utente per aggiungere controlli a un foglio di lavoro

Aggiungere una scheda personalizzata alla barra multifunzione di Excel. Gli utenti possono selezionare caselle di controllo nella scheda per aggiungere i controlli a un foglio di lavoro.

Per creare un'interfaccia utente per l'aggiunta di controlli a un foglio di lavoro

  1. Dal menu Progetto fare clic su Aggiungi nuovo elemento.

  2. Nella finestra di dialogo Aggiungi nuovo elemento selezionare Barra multifunzione (Progettazione visiva) e quindi fare clic su Aggiungi.

    Viene aperto un file denominato Ribbon1.cs o Ribbon1.vb nella finestra di progettazione della barra multifunzione e viene visualizzata una scheda e un gruppo predefiniti.

  3. Dalla scheda Controlli della barra multifunzione di Office della Casella degli strumenti trascinare un controllo CheckBox in group1.

  4. Fare clic su CheckBox1 per selezionarlo.

  5. Nella finestra Proprietà modificare le seguenti proprietà:

    Proprietà valore
    Nome Button
    Etichetta Button
  6. Aggiungere una seconda casella di controllo a group1e quindi modificare le proprietà seguenti.

    Proprietà valore
    Nome Namedrange
    Etichetta Namedrange
  7. Aggiungere una terza casella di controllo a group1 e quindi modificare le proprietà seguenti.

    Proprietà valore
    Nome Listobject
    Etichetta Listobject

Aggiungere controlli al foglio di lavoro

I controlli gestiti possono essere aggiunti solo a elementi host che fungono da contenitori. Poiché i progetti di componenti aggiuntivi VSTO vengono usati con qualsiasi cartella di lavoro aperta, il componente aggiuntivo VSTO converte il foglio di lavoro in un elemento host oppure ottiene un elemento host esistente, prima di aggiungere il controllo. Aggiungere codice ai gestori di eventi Click di ciascun controllo per generare un elemento host Worksheet basato su un foglio di lavoro aperto. Aggiungere quindi un oggetto Button, NamedRange e ListObject alla selezione corrente nel foglio di lavoro.

Per aggiungere controlli a un foglio di lavoro

  1. Nella finestra di progettazione della barra multifunzione fare doppio clic su Pulsante.

    Il Click gestore eventi della casella di controllo Pulsante viene aperto nell'editor di codice.

  2. Sostituire il gestore eventi Button_Click con il codice seguente.

    Questo codice usa il metodo GetVstoObject per ottenere un elemento host che rappresenta il primo foglio di lavoro nella cartella di lavoro e quindi viene aggiunto un controllo Button per la cella attualmente selezionata.

    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);
        }
    }
    
  3. In Esplora soluzioni selezionare Ribbon1.cs o Ribbon1.vb.

  4. Scegliere Progettazione dal menu Visualizza.

  5. Nella finestra di progettazione della barra multifunzione fare doppio clic su NamedRange.

  6. Sostituire il gestore eventi NamedRange_Click con il codice seguente.

    Questo codice usa il metodo GetVstoObject per ottenere un elemento host che rappresenta il primo foglio di lavoro nella cartella di lavoro e quindi definisce un controllo NamedRange per la cella o le celle attualmente selezionate.

    private void NamedRange_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = Globals.Factory.GetVstoObject(
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    
    
        string Name = "MyNamedRange";
    
        if (((RibbonCheckBox)sender).Checked)
        {
            Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
            if (selection != null)
            {
                worksheet.Controls.AddNamedRange(selection, Name);
            }
        }
        else
        {
            worksheet.Controls.Remove(Name);
        }
    }
    
  7. Nella finestra di progettazione della barra multifunzione fare doppio clic su ListObject.

  8. Sostituire il gestore eventi ListObject_Click con il codice seguente.

    Questo codice usa il metodo GetVstoObject per ottenere un elemento host che rappresenta il primo foglio di lavoro nella cartella di lavoro e quindi definisce un oggetto ListObject per la cella o le celle attualmente selezionate.

    private void ListObject_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = Globals.Factory.GetVstoObject(
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    
    
        string listObjectName = "MyListObject";
    
        if (((RibbonCheckBox)sender).Checked)
        {
            Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
            if (selection != null)
            {
                worksheet.Controls.AddListObject(selection, listObjectName);
            }
        }
        else
        {
            worksheet.Controls.Remove(listObjectName);
        }
    }
    
  9. Aggiungere le seguenti istruzioni alla parte iniziale del file di codice della barra multifunzione.

    using Excel = Microsoft.Office.Interop.Excel;
    using Microsoft.Office.Tools.Excel;
    using Microsoft.Office.Tools.Excel.Extensions;
    

Rimuovere i controlli dal foglio di lavoro

I controlli non sono resi permanenti quando il foglio di lavoro viene salvato e chiuso. È necessario rimuovere a livello di codice tutti i controlli Windows Form generati prima che il foglio di lavoro venga salvato, altrimenti quando la cartella di lavoro viene nuovamente aperta, verrà visualizzata solo una struttura del controllo. Aggiungere all'evento WorkbookBeforeSave il codice per rimuovere i controlli Windows Form dalla raccolta di controlli dell'elemento host generato. Per altre informazioni, vedere Rendere persistenti i controlli dinamici nei documenti di Office.

Per rimuovere i controlli dal foglio di lavoro

  1. In Esplora soluzioni selezionare ThisAddIn.cs o ThisAddIn.vb.

  2. Scegliere Codice dal menu Visualizza.

  3. Aggiungere il seguente metodo alla classe ThisAddIn. In questo codice si ottiene il primo foglio di lavoro della cartella di lavoro e viene usato il metodo HasVstoObject per controllare se il foglio di lavoro dispone di un oggetto foglio di lavoro generato. Se l'oggetto foglio di lavoro generato dispone di controlli, il codice ottiene tale oggetto ed esegue l'iterazione della raccolta di controlli rimuovendo questi ultimi.

           void Application_WorkbookBeforeSave(Microsoft.Office.Interop.Excel.Workbook workbook, 
               bool SaveAsUI, ref bool Cancel)
           {
               Excel.Worksheet worksheet =
                   workbook.Worksheets[1] as Excel.Worksheet;
               
               if (Globals.Factory.HasVstoObject(worksheet) && 
                   Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0)
               {
                   Worksheet vstoWorksheet = Globals.Factory.GetVstoObject(worksheet);
               
              
                   
                   while (vstoWorksheet.Controls.Count > 0)
                   {
                       object vstoControl = vstoWorksheet.Controls[0];
                       vstoWorksheet.Controls.Remove(vstoControl);
                   }
    
               }
           }
    
  4. In C# è necessario creare un gestore eventi per l'evento WorkbookBeforeSave. Questo codice può essere inserito nel metodo ThisAddIn_Startup. Per altre informazioni sulla creazione di gestori eventi, vedere Procedura: Creare gestori eventi nei progetti di Office. Sostituire il metodo ThisAddIn_Startup con il codice seguente.

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        this.Application.WorkbookBeforeSave += 
            new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveEventHandler
                (Application_WorkbookBeforeSave);
    }
    

Test della soluzione

Aggiungere controlli a un foglio di lavoro selezionandoli da una scheda personalizzata sulla barra multifunzione. Quando si salva il foglio di lavoro, questi controlli vengono rimossi.

Per testare la soluzione.

  1. Premere F5 per eseguire il progetto.

  2. Selezionare una qualsiasi cella di Sheet1.

  3. Fare clic sulla scheda Componenti aggiuntivi .

  4. Nel gruppo group1 fare clic su Pulsante.

    Nella cella selezionata viene visualizzato un pulsante.

  5. Selezionare una cella diversa di Sheet1.

  6. Nel gruppo group1 fare clic su NamedRange.

    Per la cella selezionata viene definito un intervallo denominato.

  7. Selezionare una serie di celle di Sheet1.

  8. Nel gruppo group1 fare clic su ListObject.

    Per le celle selezionate viene aggiunto un oggetto elenco.

  9. Salvare il foglio di lavoro.

    I controlli aggiunti a Sheet1 non vengono più visualizzati.

Passaggi successivi

In questo argomento vengono fornite altre informazioni sui controlli nei progetti di componenti aggiuntivi VSTO per Excel: