Condividi tramite


Procedura dettagliata: aggiunta di controlli a un foglio di lavoro in fase di esecuzione in un progetto a livello di applicazione

Aggiornamento: Luglio 2008

Si applica a

Le informazioni contenute in questo argomento riguardano solo i progetti Visual Studio Tools per Office e le versioni di Microsoft Office specificati.

Tipo di progetto

  • Progetti a livello di applicazione

Versione Microsoft Office

  • Excel 2007

Per ulteriori informazioni, vedere la classe Funzionalità disponibili in base ai tipi di progetto e applicazione.

È possibile aggiungere controlli a un qualsiasi foglio di lavoro aperto utilizzando un componente aggiuntivo di Excel 2007. In questa procedura dettagliata viene illustrato come utilizzare la barra multifunzione per consentire agli utenti l'aggiunta degli oggetti Button, NamedRange e ListObject a un foglio di lavoro.

Per informazioni, vedere Aggiunta di controlli ai documenti di Office in fase di esecuzione.

Vengono illustrate le attività 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:

Nel computer in uso è possibile che vengano visualizzati nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per ulteriori informazioni vedere Impostazioni di Visual Studio.

Prerequisiti

Per completare la procedura dettagliata è necessario disporre dei componenti elencati di seguito.

  • Visual Studio Tools per Office°(componente facoltativo di Visual Studio 2008 Professional e Visual Studio Team System).

  • Visual Studio 2008 Service Pack 1 (SP1).

  • Microsoft Office Excel 2007.

Creazione di un nuovo progetto componente aggiuntivo per Excel

Creare innanzitutto un progetto componente aggiuntivo per Excel 2007.

Per creare un nuovo progetto componente aggiuntivo per Excel

  1. In Visual Studio, creare un progetto componente aggiuntivo per Excel 2007 denominato ExcelDynamicControls.

  2. Selezionare Crea directory per soluzione nella finestra di dialogo Nuovo progetto.

  3. Salvare il progetto in un percorso qualsiasi.

    Per ulteriori informazioni, vedere la classe Procedura: creare progetti Visual Studio Tools per Office.

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

Aggiungere una scheda personalizzata alla barra multifunzione di Excel 2007. 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. Scegliere Aggiungi nuovo elemento dal menu Progetto.

  2. Nella finestra di dialogo Aggiungi nuovo elemento, selezionare Barra multifunzione (finestra di progettazione visiva), quindi scegliere Aggiungi.

    Nella finestra di progettazione della barra multifunzione viene aperto un file denominato Ribbon1.cs o Ribbon1.vb in cui vengono visualizzati una scheda e un gruppo predefiniti.

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

  4. Scegliere CheckBox1 per selezionarlo.

  5. Nella finestra Proprietà modificare le proprietà riportate di seguito.

    Proprietà

    Valore

    Nome

    Button

    Etichetta

    Button

  6. Aggiungere una seconda casella di controllo a group1 e modificare le seguenti proprietà.

    Proprietà

    Valore

    Nome

    NamedRange

    Etichetta

    NamedRange

  7. Aggiungere una terza casella di controllo a group1 e modificare le seguenti proprietà.

    Proprietà

    Valore

    Nome

    ListObject

    Etichetta

    ListObject

Aggiunta di controlli al foglio di lavoro

I controlli gestiti possono essere aggiunti soltanto agli elementi host che fungono da contenitori. Dal momento che i progetti componente aggiuntivo funzionano con qualsiasi cartella di lavoro aperta, il componente aggiuntivo converte il foglio di lavoro in un elemento host oppure ottiene un elemento host esistente, prima di aggiungere il controllo. Aggiungere ai gestori eventi Click di ciascun controllo il codice per generare un elemento host Worksheet basato sul foglio di lavoro aperto. Quindi, aggiungere gli oggetti Button, NamedRange e ListObject in corrispondenza della 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 gestore eventi Click della casella di controllo Pulsante viene aperto nell'editor di codice.

  2. Sostituire il gestore eventi Button_Click con il codice riportato di seguito.

    In questo codice viene utilizzato il metodo GetVstoObject per ottenere un elemento host che rappresenta il primo foglio di lavoro della cartella di lavoro, quindi viene aggiunto un controllo Button alla cella attualmente selezionata.

    Private Sub Button_Click(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _
            Handles Button.Click
        Dim worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1),  _
            Excel.Worksheet).GetVstoObject()
        Dim buttonName As String = "MyButton"
    
        If CType(sender, RibbonCheckBox).Checked Then
            Dim selection As Excel.Range = Globals.ThisAddIn.Application.Selection
            If Not (selection Is Nothing) Then
                Dim button As New Microsoft.Office.Tools.Excel.Controls.Button()
                worksheet.Controls.AddControl(button, selection, buttonName)
            End If
        Else
            worksheet.Controls.Remove(buttonName)
        End If
    End Sub
    
    private void Button_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = ((Excel.Worksheet)
            Globals.ThisAddIn.Application.
                ActiveWorkbook.Worksheets[1]).GetVstoObject();
        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 Finestra di 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 riportato di seguito.

    In questo codice viene utilizzato il metodo GetVstoObject per ottenere un elemento host che rappresenta il primo foglio di lavoro della cartella di lavoro, quindi viene definito un controllo NamedRange per le celle attualmente selezionate.

    Private Sub NamedRange_Click(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _
            Handles NamedRange.Click
        Dim worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1),  _
            Excel.Worksheet).GetVstoObject()
        Dim rangeName As String = "MyNamedRange"
    
        If CType(sender, RibbonCheckBox).Checked Then
            Dim selection As Excel.Range = Globals.ThisAddIn.Application.Selection
            If Not (selection Is Nothing) Then
                Dim namedRange As NamedRange = _
                    worksheet.Controls.AddNamedRange(selection, rangeName)
            End If
        Else
            worksheet.Controls.Remove(rangeName)
        End If
    End Sub
    
    private void NamedRange_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet =
              ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.
                  Worksheets[1]).GetVstoObject();
        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 riportato di seguito.

    In questo codice viene utilizzato il metodo GetVstoObject per ottenere un elemento host che rappresenta il primo foglio di lavoro della cartella di lavoro, quindi viene definito un oggetto ListObject per le celle attualmente selezionate.

    Private Sub ListObject_Click(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _
            Handles ListObject.Click
        Dim worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1),  _
            Excel.Worksheet).GetVstoObject()
        Dim listObjectName As String = "MyListObject"
    
        If CType(sender, RibbonCheckBox).Checked Then
            Dim selection As Excel.Range = _
                Globals.ThisAddIn.Application.Selection
            If Not (selection Is Nothing) Then
                worksheet.Controls.AddListObject(selection, listObjectName)
            End If
        Else
            worksheet.Controls.Remove(listObjectName)
        End If
    End Sub
    
    private void ListObject_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet =
              ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.
                  Worksheets[1]).GetVstoObject();
        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 quanto riportato di seguito utilizzando le istruzioni fornite all'inizio del file di codice della barra multifunzione.

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

Rimozione di 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 dall'insieme di controlli dell'elemento host generato. Per ulteriori informazioni, vedere la classe Persistenza dei 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 metodo seguente alla classe ThisAddIn. In questo codice si ottiene il primo foglio di lavoro della cartella di lavoro e viene utilizzato il metodo HasVstoObject per controllare se il foglio di lavoro dispone di un oggetto Worksheet di Visual Studio Tools per Office. Se l'oggetto Worksheet generato dispone di controlli, il codice ottiene tale oggetto Worksheet e scorre l'insieme di controlli rimuovendo questi ultimi.

    Sub Application_WorkbookBeforeSave _
        (ByVal workbook As Microsoft.Office.Interop.Excel.Workbook, _
         ByVal SaveAsUI As Boolean, ByRef Cancel As Boolean) _
         Handles Application.WorkbookBeforeSave
    
        Dim worksheet As Excel.Worksheet = workbook.Worksheets(1)
        If worksheet.HasVstoObject() And worksheet.GetVstoObject().Controls.Count > 0 Then
            Dim vstoWorksheet As Worksheet = worksheet.GetVstoObject()
    
            While vstoWorksheet.Controls.Count > 0 
                Dim vstoControl As Object = vstoWorksheet.Controls(0) 
                vstoWorksheet.Controls.Remove(vstoControl) 
            End While
        End If
    End Sub
    
    void Application_WorkbookBeforeSave(Microsoft.Office.Interop.Excel.Workbook workbook, 
        bool SaveAsUI, ref bool Cancel)
    {
        Excel.Worksheet worksheet =
            workbook.Worksheets[1] as Excel.Worksheet;
    
        if (worksheet.HasVstoObject() && worksheet.GetVstoObject().Controls.Count > 0)
        {
            Worksheet vstoWorksheet = worksheet.GetVstoObject();
    
            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 ulteriori informazioni sulla creazione di gestori eventi, vedere Procedura: creare gestori eventi in Visual Studio Tools per 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);
    }
    

Verifica 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 verificare 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, scegliere Pulsante.

    Nella cella selezionata viene visualizzato un pulsante.

  5. Selezionare un'altra cella di Sheet1.

  6. Nel gruppo group1, scegliere NamedRange.

    Per la cella selezionata viene definito un intervallo denominato.

  7. Selezionare una serie di celle di Sheet1.

  8. Nel gruppo group1, scegliere 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 è possibile reperire ulteriori informazioni sui controlli nei progetti componente aggiuntivo per Excel 2007:

Vedere anche

Concetti

Sviluppo di componenti aggiuntivi a livello di applicazione per Excel

Utilizzo di controlli Windows Form nei fogli di lavoro di Excel

Controllo NamedRange

Controllo ListObject

Altre risorse

Controlli nei documenti di Office

Controlli host di Excel

Cronologia delle modifiche

Date

History

Motivo

Luglio 2008

Argomento aggiunto.

Modifica di funzionalità in SP1.