Passo a passo: Adicionando controles a uma planilha em tempo de execução em um projeto de nível de aplicativo

Você pode adicionar alguns controles a planilha aberta usando um suplemento do excel.Essa explicação passo a passo demonstra como usar a fita para permitir que usuários adicionem Button, NamedRange, e ListObject a uma planilha.Para obter mais informações, consulte: Adicionar controles a documentos do Office em tempo de execução.

Se aplica: as informações contidas em este tópico se aplicam para projetos no nível do Excel 2010.Para obter mais informações, consulte Recursos disponíveis pelo aplicativo do Office e o tipo de projeto.

Essa explicação passo a passo mostra as seguintes tarefas:

  • Fornecendo uma interface de usuário (UI) para adicionar controles à planilha.

  • Adicionando controles à planilha.

  • Removendo controles da planilha.

ObservaçãoObservação

Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos da interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Configurações de Visual Studio.

Pré-requisitos

Para completar este passo-a-passo, são necessários os seguintes componentes:

-

Uma edição do Visual Studio 2012 que inclui o Microsoft Office Developer Tools. Para obter mais informações, consulte [Configurando um computador para desenvolver soluções do Office](bb398242\(v=vs.110\).md).
  • Excel 2013 ou Excel 2010.

Criando um novo projeto do suplemento do excel

Inicie criando um projeto do suplemento do excel.

Para criar um novo projeto do suplemento do excel

  1. Em Visual Studio, crie um projeto do suplemento do excel com o nome ExcelDynamicControls.Para obter mais informações, consulte Como: criar projetos do Office em Visual Studio.

  2. Adicione uma referência ao conjunto de Microsoft.Office.Tools.Excel.v4.0.Utilities.dll .Essa referência é necessária para adicionar programaticamente posteriormente um controle de formulários do windows para uma planilha em essa explicação passo a passo.

Fornecendo interface de usuário para adicionar controles a uma planilha

Adicione um guia personalizado à fita Excel.Os usuários podem selecionar caixas de seleção na guia para adicionar controles a uma planilha.

Para fornecer uma interface de usuário para adicionar controles a uma planilha

  1. No menu Project, clique em Add New Item.

  2. Em a caixa de diálogo de Adicionar novo item , **fita (designer visual)**selecione, e clique em Adicionar.

    Um arquivo chamado Ribbon1.cs ou Ribbon1.vb abre no designer de fita e exibe uma guia e um grupo padrão.

  3. De a guia de Controles de fita do Office de Caixa de Ferramentas, arraste um controle de caixa de seleção em group1.

  4. Clique CheckBox1 para selecioná-lo.

  5. Em a janela de Propriedades , altere as propriedades a seguir.

    Propriedade

    Valor

    Nome

    Button

    Label

    Button

  6. Adicione uma segunda caixa de seleção a group1e em seguida, altere as seguintes propriedades.

    Propriedade

    Valor

    Nome

    NamedRange

    Label

    NamedRange

  7. Adicionar uma terceira caixa de seleção a group1e em seguida, altere as seguintes propriedades.

    Propriedade

    Valor

    Nome

    ListObject

    Label

    ListObject

Adicionando controles à planilha

Os controles gerenciados podem ser adicionados somente para itens de host, que atuam como recipientes.Porque o trabalho de projetos do suplemento com alguns abra a pasta de trabalho, o suplemento converte a planilha em um item host, ou obtém um item existente do host, antes de adicionar o controle.Adicione código para manipuladores de eventos de clique de cada controle para gerar um item de host de Worksheet que é baseado na planilha aberta.Em seguida, adicione Button, NamedRange, e ListObject na seleção atual da planilha.

para adicionar controles a uma planilha

  1. Em o designer de fita, clique duas vezes em Botão.

    O manipulador de eventos de Click caixa de seleção de Botão abre na editor de códigos.

  2. Substitua o manipulador de eventos de Button_Click com o código a seguir.

    Esse código usa o método de GetVstoObject para obter um item host que representa a primeira planilha na pasta de trabalho em seguida, adicionar um controle de Button a célula selecionada.

    Private Sub Button_Click(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _
            Handles Button.Click
    
        Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet =
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1)
    
        Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet =
            Globals.Factory.GetVstoObject(NativeWorksheet)
    
    
        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 = 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. Em Gerenciador de Soluções, em Ribbon1.cs selecione ou em Ribbon1.vb.

  4. Em o menu de Modo de Visualização , clique em Designer.

  5. Em o designer de fita, clique duas vezes em NamedRange.

  6. Substitua o manipulador de eventos de NamedRange_Click com o código a seguir.

    Esse código usa o método de GetVstoObject para obter um item host que representa a primeira planilha na pasta de trabalho, e então define um controle de NamedRange para a célula ou as células selecionadas no momento.

    Private Sub NamedRange_Click(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _
            Handles NamedRange.Click
    
        Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet =
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1)
    
        Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet =
            Globals.Factory.GetVstoObject(NativeWorksheet)
    
        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 = 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. Em o designer de fita, clique duas vezes em ListObject.

  8. Substitua o manipulador de eventos de ListObject_Click com o código a seguir.

    Esse código usa o método de GetVstoObject para obter um item host que representa a primeira planilha na pasta de trabalho, e então define ListObject para a célula ou as células selecionadas no momento.

    Private Sub ListObject_Click(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _
            Handles ListObject.Click
    
        Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet =
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1)
    
        Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet =
            Globals.Factory.GetVstoObject(NativeWorksheet)
    
    
        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 = 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. Adicione as instruções a seguir à parte superior do arquivo de código de fita.

    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;
    

Removendo controles da planilha

Os controles não são persistidos quando a planilha é salvo e fechada.Você deve programaticamente remover todos os controles de formulários do windows gerado antes da planilha é salva, ou apenas um contorno do controle será exibido quando a pasta de trabalho é aberta novamente.Adicione código ao evento de WorkbookBeforeSave que remove os controles de formulários do windows coleção de controles de item gerado host.Para obter mais informações, consulte Persisting controles dinâmicos em documentos do Office.

Para remover os controles da planilha

  1. Em Gerenciador de Soluções, em ThisAddIn.cs selecione ou em ThisAddIn.vb.

  2. Em o menu de Modo de Visualização , clique em Código.

  3. Adicione o seguinte método à classe de ThisAddIn.Esse código obtém a primeira planilha na pasta de trabalho e usa o método de HasVstoObject para verificar se a planilha tenha um objeto gerado a planilha.Se o objeto gerado a planilha tem controles, o código obtém o objeto que a planilha e itera através da coleção do controle, removendo controles.

    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 Globals.Factory.HasVstoObject(worksheet) And
            Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0 Then
            Dim vstoWorksheet As Worksheet = Globals.Factory.GetVstoObject(worksheet)
    
            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 (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. em C#, você deve criar um manipulador de eventos para o evento de WorkbookBeforeSave .Você pode colocar esse código no método de ThisAddIn_Startup .Para obter mais informações sobre manipuladores de evento, consulte Como: criar manipuladores de eventos em projetos do Office.Substituir o método de ThisAddIn_Startup com o código a seguir.

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

testando a solução

Adicionar controles a uma planilha selecionando os de um guia personalizado em fita.Quando você salva a planilha, esses controles são removidos.

para testar a solução.

  1. Pressione F5 para executar o seu projeto.

  2. Selecione qualquer célula em Sheet1.

  3. Clique na guia de Suplementos .

  4. Em o grupo de group1 , clique Botão.

    Um botão aparece na célula selecionada.

  5. Selecione uma célula diferente em Sheet1.

  6. Em o grupo de group1 , clique NamedRange.

    um intervalo nomeado é definido para a célula selecionada.

  7. Selecione uma série de células em Sheet1.

  8. Em o grupo de group1 , clique ListObject.

    Um objeto de lista é adicionado para as células selecionadas.

  9. Salve a planilha.

    Os controles que você adicionou a Sheet1 não aparecem.

Próximas etapas

Você pode aprender mais sobre controles em projetos do suplemento do excel em este tópico:

Consulte também

Conceitos

Controles do Windows Forms em Visão geral de documentos do Office

Controle NamedRange

Controle de ListObject

Outros recursos

Soluções do Excel

Controles em documentos do Office