Passo a passo: Programação do Office (C# e Visual Basic)
Visual Studio 2010 apresenta novos recursos em C# e Visual Basic que melhora a programação Microsoft Office.Cada linguagem adicionou os recursos que já existem em outra linguagem.
Novos recursos em C# incluem argumentos nomeados e opcionais, valores de retorno que tem o tipo dynamic, e, em programação COM, a capacidade de omitir a palavra-chave de ref e acessar propriedades indexadas.Os novos recursos no Visual Basic incluem propriedades autoimplementadas, instruções em expressões lambda, e inicializadores de coleção.
Ambos os idiomas permitem a incorporação de informações do tipo, que permite implantação de assemblies que interagem com componentes COM sem implantar assemblies de interoperabilidade primários (PIAs) para o computador do usuário.Para obter mais informações, consulte Passo a passo: Incorporação de tipos a partir de Assemblies gerenciados (C# e Visual Basic).
Essa explicação passo a passo demonstra os novos recursos no contexto de programação do Office, mas muitos de eles também são úteis em programação geral.Em esta explicação passo a passo, você usará primeiro um aplicativo do suplemento do excel criar uma pasta de trabalho do Excel.Você irá criar um documento do word que contém um link para a pasta de trabalho.Finalmente, você verá como a dependência de PIA pode ser ativada e desativado.
Pré-requisitos
Você deve ter o Microsoft Office Excel 2010 ou 2007 e Microsoft Office Word 2010 ou 2007 instalado no seu computador para concluir essa explicação passo a passo.
Se você estiver usando um sistema operacional que é mais antiga do que Windows Vista, certifique-se de que .NET Framework 2.0 está instalado.
Observaçã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. |
Para configurar um aplicativo do suplemento do excel
Inicie o Visual Studio.
No menu File, aponte para New, e em seguida, clique em Project.
Em o painel de Modelos Instalados , expanda Visual Basic ou Visual C#, expanda Office, clique em 2010 (ou 2007 se você estiver usando o Office 2007).
Em o painel de Modelos , clique em suplemento do Excel 2010 (ou Suplemento do Excel 2007).
Examine a parte superior do painel de Modelos para certificar-se de que o .NET Framework 4 aparece na caixa de Estrutura de Destino .
Digite um nome para o projeto na caixa de Nome , se você desejar.
Clique em OK.
o novo projeto aparece em Gerenciador de Soluções.
para adicionar referências
Em Gerenciador de Soluções, clique com o botão direito do mouse no nome do seu projeto e clique em Adicionar Referência.a caixa de diálogo de Adicionar Referência aparece.
Em a guia de .NET , Microsoft.Office.Interop.Excel, selecione a versão 14.0.0.0 (ou a versão 12.0.0.0 para Excel 2007), na lista de Nome do componente , e em seguida mantém pressionada a tecla CTRL e selecione Microsoft.Office.Interop.Wordversão, 14.0.0.0 (ou versão 12.0.0.0 para Word 2007).
Clique em OK.
Para adicionar instruções de importação ou diretivas necessárias de uso
Em Gerenciador de Soluções, clique com o botão direito do mouse no arquivo de ThisAddIn.vb ou de ThisAddIn.cs e clique em Exibir Código.
Adicione as seguintes declarações de Imports (Visual Basic) ou diretivas de using (C#) para a parte superior do arquivo de código se não está mais atual.
Imports Microsoft.Office.Interop
using System.Collections.Generic; using Excel = Microsoft.Office.Interop.Excel; using Word = Microsoft.Office.Interop.Word;
para criar uma lista de contas bancárias
Em Gerenciador de Soluções, clique com o botão direito do mouse no nome do projeto, clique Adicionar, clique em Classe.Nomeie a classe Account.vb se você estiver usando Visual Basic ou Account.cs se você estiver usando C#.Clique em Adicionar.
Substitua a definição de classe de Account com o código a seguir.O uso das definições de classe automática implementou propriedades, novos no Visual Basic no Visual Studio 2010.Para obter mais informações, consulte Propriedades de auto-implementado (Visual Basic).
Public Class Account Property ID As Integer = -1 Property Balance As Double End Class
class Account { public int ID { get; set; } public double Balance { get; set; } }
Para criar bankAccounts listar que contém duas contas, adicione o seguinte código ao método de ThisAddIn_Startup em ThisAddIn.vb ou em ThisAddIn.cs.As declarações usam lista de inicializadores de coleção, novos no Visual Basic no Visual Studio 2010.Para obter mais informações, consulte Inicializadores de coleção (Visual Basic).
Dim bankAccounts As New List(Of Account) From { New Account With { .ID = 345, .Balance = 541.27 }, New Account With { .ID = 123, .Balance = -127.44 } }
var bankAccounts = new List<Account> { new Account { ID = 345, Balance = 541.27 }, new Account { ID = 123, Balance = -127.44 } };
Para exportar dados do excel
Em o mesmo arquivo, adicione o seguinte método à classe de ThisAddIn .O método configura de uma pasta de trabalho do Excel e exporta-lhe dados.
Sub DisplayInExcel(ByVal accounts As IEnumerable(Of Account), ByVal DisplayAction As Action(Of Account, Excel.Range)) With Me.Application ' Add a new Excel workbook. .Workbooks.Add() .Visible = True .Range("A1").Value = "ID" .Range("B1").Value = "Balance" .Range("A2").Select() For Each ac In accounts DisplayAction(ac, .ActiveCell) .ActiveCell.Offset(1, 0).Select() Next ' Copy the results to the Clipboard. .Range("A1:B3").Copy() End With End Sub
void DisplayInExcel(IEnumerable<Account> accounts, Action<Account, Excel.Range> DisplayFunc) { var excelApp = this.Application; // Add a new Excel workbook. excelApp.Workbooks.Add(); excelApp.Visible = true; excelApp.Range["A1"].Value = "ID"; excelApp.Range["B1"].Value = "Balance"; excelApp.Range["A2"].Select(); foreach (var ac in accounts) { DisplayFunc(ac, excelApp.ActiveCell); excelApp.ActiveCell.Offset[1, 0].Select(); } // Copy the results to the Clipboard. excelApp.Range["A1:B3"].Copy(); }
Dois novos recursos de C# são usados em este método.Ambos esses recursos já existem no Visual Basic.
o método Adicionar tem um parâmetro opcional para especificar um modelo específico.Parâmetros opcionais, novos em Visual C# 2010, permite que você omitir o argumento para o parâmetro se você quiser usar o valor padrão do parâmetro.Porque nenhum argumento é enviado no exemplo anterior, Add usa o modelo padrão e cria uma nova pasta de trabalho.A instrução equivalente em versões anteriores do C# requer um argumento de espaço reservado: excelApp.Workbooks.Add(Type.Missing).
Para obter mais informações, consulte Argumentos nomeados e opcionais (guia de programação do C#).
As propriedades intervalo de Range e de Offset do objeto usando o recurso indexado propriedades .Esse recurso permite que você receber essas propriedades de tipos COM usando a seguinte sintaxe típica C#.As propriedades indexadas também permite que você use a propriedade de Value do objeto de Range , eliminando a necessidade de usar a propriedade de Value2 .a propriedade de Value é indexada, mas o índice é opcional.Os argumentos opcionais e propriedades indexadas funcionam juntos no exemplo a seguir.
// Visual C# 2010 provides indexed properties for COM programming. excelApp.Range["A1"].Value = "ID"; excelApp.ActiveCell.Offset[1, 0].Select();
Em as versões anteriores da linguagem, a seguinte sintaxe especial é necessária.
// In Visual C# 2008, you cannot access the Range, Offset, and Value // properties directly. excelApp.get_Range("A1").Value2 = "ID"; excelApp.ActiveCell.get_Offset(1, 0).Select();
Você não pode criar propriedades indexadas de sua preferência.O recurso oferece suporte somente consumo de propriedades indexadas existentes.
Para obter mais informações, consulte Como: usar indexado propriedades na programação de interoperabilidade de COM (guia de programação do C#).
Adicione o seguinte código ao final de DisplayInExcel para ajustar as larguras de coluna para caber o conteúdo.
' Add the following two lines at the end of the With statement. .Columns(1).AutoFit() .Columns(2).AutoFit()
excelApp.Columns[1].AutoFit(); excelApp.Columns[2].AutoFit();
Essas adições demonstram um novo recurso em C# 2010: manipulando valores de Object retornado de host de COM como o Office como se eles tiverem o tipo dinâmico.Isso acontece automaticamente quando Inserir Tipos Interop é definido como seu valor padrão, ou, Trueequivalente, quando o assembly é referenciado pela opção de compilador /link .O tipo dynamic permite associação tardia, já está disponível no Visual Basic, e impede a conversão explícita necessária em visual Basic 2008 e versões anteriores da linguagem.
Por exemplo, excelApp.Columns[1] retorna Object, e AutoFit é um método intervalo do excel.sem dynamic, você deve converter o objeto retornado por excelApp.Columns[1] como uma instância de Range antes de chamar o método AutoFit.
// Casting is required in Visual C# 2008. ((Excel.Range)excelApp.Columns[1]).AutoFit(); // Casting is not required in Visual C# 2010. excelApp.Columns[1].AutoFit();
Para obter mais informações sobre tipos de interoperabilidade inseridas, consulte “procedimentos para localizar a referência de PIA” e “para restaurar posteriormente a dependência de PIA” em este tópico.Para obter mais informações sobre dynamic, consulte dinâmico (referência de C#) ou Usar o tipo dinâmico (C# Programming Guide).
Para chamar DisplayInExcel
Adicione o seguinte código ao final do método de ThisAddIn_StartUp .A chamada a DisplayInExcel contém dois argumentos.O primeiro argumento é o nome da lista de contas a serem processadas.O segundo argumento é uma expressão lambda de várias linhas que define como os dados devem ser processados.Os valores de ID e de balance para cada conta são exibidos em células adjacentes, e a linha será exibida em vermelho se o saldo é menor que zero.Multiline expressões lambda é um novo recurso no Visual Basic 2010.Para obter mais informações, consulte Expressões lambda (Visual Basic).
DisplayInExcel(bankAccounts, Sub(account, cell) ' This multiline lambda expression sets custom ' processing rules for the bankAccounts. cell.Value = account.ID cell.Offset(0, 1).Value = account.Balance If account.Balance < 0 Then cell.Interior.Color = RGB(255, 0, 0) cell.Offset(0, 1).Interior.Color = RGB(255, 0, 0) End If End Sub)
DisplayInExcel(bankAccounts, (account, cell) => // This multiline lambda expression sets custom processing rules // for the bankAccounts. { cell.Value = account.ID; cell.Offset[0, 1].Value = account.Balance; if (account.Balance < 0) { cell.Interior.Color = 255; cell.Offset[0, 1].Interior.Color = 255; } });
Para executar o programa, pressione F5.Aparece uma planilha do excel que contém os dados de contas.
Para adicionar um documento do word
Adicione o seguinte código ao final do método de ThisAddIn_StartUp para criar um documento do word que contém um link para a pasta de trabalho do Excel.
Dim wordApp As New Word.Application wordApp.Visible = True wordApp.Documents.Add() wordApp.Selection.PasteSpecial(Link:=True, DisplayAsIcon:=True)
var wordApp = new Word.Application(); wordApp.Visible = true; wordApp.Documents.Add(); wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
Este código a seguir demonstra vários dos novos recursos em C#: a capacidade de omitir a palavra-chave de ref na programação de COM argumentos nomeados, em, e em argumentos opcionais.Esses recursos já existem no Visual Basic.PasteSpecial O método tem sete parâmetros, que são definidos como parâmetros opcionais de referência.Antes de visual C# 2010, você teve que definir variáveis de objeto para usar como argumentos para os sete parâmetros, mesmo quando você não tem nenhum valor significativo para enviar em.Argumentos nomeados e opcionais permite que você designar os parâmetros que você deseja acessar pelo nome, e enviar argumentos apenas 2 os parâmetros.Em esse exemplo, os argumentos são enviados para indicar que um link para a pasta de trabalho na área de transferência deve ser criado (parâmetro Link), e o link deve ser exibido no documento do word como um parâmetro DisplayAsIconícone ().Visual C# 2010 também permite que você omitir a palavra-chave de ref para esses argumentos.Compare o seguinte segmento de código visual C# 2008 com a linha necessária em visual C# 2010:
// Call to PasteSpecial in Visual C# 2008. object iconIndex = Type.Missing; object link = true; object placement = Type.Missing; object displayAsIcon = true; object dataType = Type.Missing; object iconFileName = Type.Missing; object iconLabel = Type.Missing; wordApp.Selection.PasteSpecial(ref iconIndex, ref link, ref placement, ref displayAsIcon, ref dataType, ref iconFileName, ref iconLabel); // Call to PasteSpecial in Visual C# 2010. wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
Para executar o aplicativo
- Pressione F5 para executar o aplicativo.Inicia o excel e exibe uma tabela que contém informações das duas contas em bankAccounts.Em um documento do word aparece que contém um link para a tabela do excel.
para limpar o projeto concluído
- Em o Visual Studio, clique Limpar solução no menu de Compilar .Caso contrário, o suplemento será executado sempre que você abrir o excel no seu computador.
Para localizar a referência de PIA
Executar o aplicativo novamente, mas não Limpar soluçãoclique em.
Em o menu de Iniciar , clique em Todos os Programas.Clique na seguir Microsoft Visual Studio 2010, em seguida O Visual Studio, em seguida Prompt de Comando do Visual Studio (2010).
Digite ildasm o windows do prompt de comando do Visual Studio em (2010), e pressione ENTER.A janela do IL DASM aparece.
Em o menu de Arquivo na janela do IL DASM, clique em Abrir.Clique duas vezes Visual Studio 2010, clique duas vezes em Projetos.Abra a pasta para seu projeto, e procure na pasta bin/de depuração para o nome do projeto.dll.Clique duas vezes o nome do projeto.dll.Uma nova janela exibe os atributos do seu projeto, além de referências a outros módulos e assemblies.Observe que os namespaces Microsoft.Office.Interop.Excel e Microsoft.Office.Interop.Word são colocados no assembly.Por padrão no Visual Studio 2010, o compilador importa os tipos que você precisa de um PIA no assembly referenciado.
Para obter mais informações, consulte Como: exibir o conteúdo do Assembly.
Clique duas vezes no ícone de MANIFESTO .Aparece uma janela que contém uma lista de assemblies que contêm itens referenciados pelo projeto.Microsoft.Office.Interop.Excel e Microsoft.Office.Interop.Word não estão incluídos na lista.Porque os tipos suas necessidades de projeto foram importados no assembly, referências a um PIA não são necessárias.Isso facilita a implantação.Os PIAs não fazem têm presentes no computador do usuário, como um aplicativo e não requer a implantação de uma versão específica de um PIA, aplicativos podem ser criados para trabalhar com várias versões do Office, desde que as APIs necessários existem em todas as versões.
Porque a implantação de PIAs não é mais necessário, você pode criar um aplicativo em cenários avançados que funciona com várias versões do Office, incluindo versões anteriores.Em o entanto, isso funciona somente se seu código não usa nenhum APIs que não estão disponíveis na versão do Office que você está trabalhando.Não é sempre claro se API específico está disponível em uma versão anterior, e trabalhar com versões anteriores do Office não é recomendado por esse motivo.
Observação Office não publicou PIAs antes do Office 2003.Portanto, a única maneira para gerar um assembly de interoperabilidade para o Office 2002 ou versões anteriores é importando as referências COM.
Feche a janela e a janela do manifesto do assembly.
Para restaurar a dependência de PIA
No Gerenciador de Soluções clique no botão Exibir Todos os Arquivos.Expanda a pasta de Referências e selecione Microsoft.Office.Interop.Excel.Pressione F4 para exibir a janela de Propriedades .
Em a janela de Properties, altere a propriedade de Inserir Tipos Interop de True a False.
Repita as etapas 1 e 2 em este procedimento para Microsoft.Office.Interop.Word.
Em C#, comentários de fora para os dois chamadas a Autofit no final do método de DisplayInExcel .
Pressione F5 para verificar se o projeto ainda seja executado corretamente.
Repita as etapas 1-3 do procedimento anterior para abrir a janela do assembly.Observe que Microsoft.Office.Interop.Word e Microsoft.Office.Interop.Excel não estão mais na lista de conjuntos inseridos.
Clique duas vezes no ícone e role de MANIFESTO através da lista de módulos (assemblies) referenciados.Microsoft.Office.Interop.Word e Microsoft.Office.Interop.Excel estão na lista.Porque o aplicativo faz referência a PIAs Excel e de palavras, e a propriedade de Inserir Tipos Interop é definida como False, ambos os assemblies devem existir no computador do usuário final.
Em o Visual Studio, clique em Limpar solução no menu de Compilar para limpar o projeto concluído.
Consulte também
Tarefas
Passo a passo: Incorporação de tipos a partir de Assemblies gerenciados (C# e Visual Basic)
Passo a passo: Criando O primeiro nível do aplicativo Add-in para o Excel
Referência
Auto-implementado propriedades (guia de programação do C#)
Objeto e coleção inicializadores (guia de programação do C#)
Expressões lambda (guia de programação do C#)
Interoperabilidade (guia de programação do C#)
Conceitos
Propriedades de auto-implementado (Visual Basic)
Inicializadores de coleção (Visual Basic)
Parâmetros opcionais (Visual Basic)
Passando argumentos por posição e por nome (Visual Basic)
Argumentos nomeados e opcionais (guia de programação do C#)
(Visual Basic) de vinculação antecipada e atrasada
Expressões lambda (Visual Basic)