Ligação para servidores de automação do Office com o Visual translation from VPE for Csharp .NET

Traduções deste artigo Traduções deste artigo
ID do artigo: 302902 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Quando você automatizar um aplicativo como um Microsoft Office aplicativo, as chamadas para as propriedades e métodos do escritório objetos do aplicativo devem estar conectados de alguma forma a esses objetos. O processo de propriedade de conexão e chamadas de método para os objetos que implementam as propriedades e métodos normalmente é chamado ligação . No Visual translation from VPE for Csharp, os dois tipos de ligação que estão disponíveis são vinculação antecipada e vinculação posterior . O tipo de ligação escolhido pode afetar muitos aspectos do seu programa, incluindo desempenho, flexibilidade e capacidade de manutenção.

Este artigo explica e compara ligação antecipada e atrasada para translation from VPE for Csharp Visual clientes de automação e fornece exemplos de código que demonstram os dois tipos de ligação.

Vinculação antecipada

Com a vinculação antecipada, translation from VPE for Csharp Visual usa informações de tipo que está disponíveis sobre o aplicativo do Office em questão vincular diretamente aos métodos ou propriedades que ele precisa usar. O compilador pode executar o tipo e sintaxe verifica para garantir que o número correto e o tipo de parâmetros são passados para o método ou propriedade e que o valor retornado será do tipo esperado. Como menos trabalho é necessário em tempo de execução para fazer uma chamada a uma propriedade ou método, vinculação antecipada, às vezes, é mais rápida; no entanto, embora enlace pode ser mais rápido, desempenho diferenças quando comparado a ligação tardia são geralmente insignificante.

Vinculação antecipada tem a desvantagem secundária que ele pode introduzir problemas de compatibilidade de versão possíveis. Por exemplo, suponha que um servidor de automação, como o Microsoft Excel 2002 apresenta um novo método ou propriedade que não está disponível no Excel 2000 ou faz uma alteração a uma propriedade existente ou método. Essas alterações podem alterar o layout binário do objeto e causar problemas com um aplicativo Visual translation from VPE for Csharp que usa as informações de tipo do Excel 2002 para automatizar Excel 2000. Para evitar esse problema com o enlace inicial, geralmente, é recomendável que você use o tipo de informação para a versão mais antiga do aplicativo Office que você deseja dar suporte quando você desenvolver e testar seu cliente de automação.

As etapas seguintes demonstram como criar um cliente de automação que usa a vinculação antecipada. Observe que, como as etapas ilustram, vinculação antecipada requer você fazer referência a biblioteca de tipos para o cliente de automação.

Criar um cliente de automação que usa a vinculação antecipada

  1. Inicie o Microsoft Visual Studio NET.. No menu arquivo , clique em novo e, em seguida, clique em Project . Selecione os tipos de projetos translation from VPE for Csharp Visual Windows Application . O Form1 é criado por padrão.
  2. Adicione uma referência à Biblioteca de objetos do Microsoft Excel . Para fazer isso, execute as seguintes etapas:
    1. No menu Project , clique em Add Reference .
    2. Na guia COM , localize a Biblioteca de objetos do Microsoft Excel e clique em Selecionar .

      Observação O Office 2003 inclui assemblies de interoperabilidade primários (PIAs). O Office XP não inclui PIAs, mas podem ser baixados. Para obter informações adicionais sobre PIAs do Office XP, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
      328912Microsoft Office XP módulos de interoperabilidade primários (PIAs) estão disponíveis para download
    3. Clique em OK na caixa de diálogo Add References para aceitar as seleções. Se você receber uma solicitação para gerar wrappers para as bibliotecas que você selecionou, clique em Sim .
  3. No menu Exibir , selecione a caixa de ferramentas para exibir a caixa de ferramentas e adicione um botão ao Form1.
  4. Clique duas vezes em Button1 . A janela de código para o formulário é exibida.
  5. Na janela código, substitua o código a seguir
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    					
    com:
    private void button1_Click(object sender, System.EventArgs e)
    {
    	Excel.Application objApp;
    	Excel._Workbook objBook;
    	Excel.Workbooks objBooks;
    	Excel.Sheets objSheets;
    	Excel._Worksheet objSheet;
    	Excel.Range range;
    
    	try
    	{
    		// Instantiate Excel and start a new workbook.
    		objApp = new Excel.Application();
    		objBooks = objApp.Workbooks;
    		objBook = objBooks.Add( Missing.Value );
    		objSheets = objBook.Worksheets;
    		objSheet = (Excel._Worksheet)objSheets.get_Item(1);
    
    		range = objSheet.get_Range("A1", Missing.Value);
    
    		range.set_Value(Missing.Value, "Hello, World!" );
    
    		//Return control of Excel to the user.
    		objApp.Visible = true;
    		objApp.UserControl = true;
    	}
    	catch( Exception theException ) 
    	{
    		String errorMessage;
    		errorMessage = "Error: ";
    		errorMessage = String.Concat( errorMessage, theException.Message );
    		errorMessage = String.Concat( errorMessage, " Line: " );
    		errorMessage = String.Concat( errorMessage, theException.Source );
    
    		MessageBox.Show( errorMessage, "Error" );
    	}
    }  
    					
  6. Role até o início da janela de código. Adicione a seguinte linha ao final da lista de diretivas usando :
    using System.Reflection;
    using Excel = Microsoft.Office.Interop.Excel;
    					

Ligação tardia

Em contraste com ligação inicial, a ligação tardia aguarda até que tempo de execução para vincular a propriedade e método chama a seus objetos. Para fazer isso, o objeto de destino deve implementar uma interface COM especial: IDispatch . O método IDispatch::GetIDsOfNames permite translation from VPE for Csharp Visual para interrogar um objeto sobre quais métodos e propriedades que ele oferece suporte e o método de IDispatch:: Invoke permite que translation from VPE for Csharp Visual para chamar esses métodos e propriedades. Ligação tardia dessa maneira tem a vantagem de remover algumas das dependências versão inerentes com ligação inicial. No entanto, ele possui as desvantagens de remoção de verificações de tempo de compilação na integridade do código de automação, bem como não fornece recursos do IntelliSense que podem fornecer pistas para corrigir chamadas a métodos e propriedades.

Para usar ligação tardia no Visual translation from VPE for Csharp, use o método System.Type.InvokeMember . Este método chama IDispatch::GetIDsOfNames e IDispatch:: Invoke para vincular a métodos e propriedades do servidor de automação.

Criar um cliente de automação que usa a ligação tardia

  1. Inicie o Microsoft Visual Studio NET.. No menu arquivo , clique em novo e, em seguida, clique em Project . Selecione os tipos de projetos translation from VPE for Csharp Visual Windows Application . O Form1 é criado por padrão.
  2. No menu Exibir , selecione a caixa de ferramentas para exibir a caixa de ferramentas e adicione um botão ao Form1.
  3. Clique duas vezes em Button1 . A janela de código para o formulário é exibida.
  4. Na janela código, substitua o código a seguir
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    						
    com:
    private void button1_Click(object sender, System.EventArgs e)
    {
    	object objApp_Late;
    	object objBook_Late;
    	object objBooks_Late;
    	object objSheets_Late;
    	object objSheet_Late;
    	object objRange_Late;
    	object[] Parameters;
    
    	try
    	{
    		// Get the class type and instantiate Excel.
    		Type objClassType; 
    		objClassType = Type.GetTypeFromProgID("Excel.Application"); 
    		objApp_Late = Activator.CreateInstance(objClassType);
    
    		//Get the workbooks collection.
    		objBooks_Late = objApp_Late.GetType().InvokeMember( "Workbooks", 
    		BindingFlags.GetProperty, null, objApp_Late, null );
    
    		//Add a new workbook.
    		objBook_Late = objBooks_Late.GetType().InvokeMember( "Add", 
    			BindingFlags.InvokeMethod, null, objBooks_Late, null );
    
    		//Get the worksheets collection.
    		objSheets_Late = objBook_Late.GetType().InvokeMember( "Worksheets",
    			BindingFlags.GetProperty, null, objBook_Late, null );
    
    		//Get the first worksheet.
    		Parameters = new Object[1];
    		Parameters[0] = 1;
    		objSheet_Late = objSheets_Late.GetType().InvokeMember( "Item", 
    			BindingFlags.GetProperty, null, objSheets_Late, Parameters );
    
    		//Get a range object that contains cell A1.
    		Parameters = new Object[2];
    		Parameters[0] = "A1";
    		Parameters[1] = Missing.Value;
    		objRange_Late = objSheet_Late.GetType().InvokeMember( "Range",
    			BindingFlags.GetProperty, null, objSheet_Late, Parameters );
    
    		//Write "Hello, World!" in cell A1.
    		Parameters = new Object[1];
    		Parameters[0] = "Hello, World!";
    		objRange_Late.GetType().InvokeMember( "Value", BindingFlags.SetProperty, 
    			null, objRange_Late, Parameters );
    
    		//Return control of Excel to the user.
    		Parameters = new Object[1];
    		Parameters[0] = true;
    		objApp_Late.GetType().InvokeMember( "Visible", BindingFlags.SetProperty,
    			null, objApp_Late, Parameters );
    		objApp_Late.GetType().InvokeMember( "UserControl", BindingFlags.SetProperty,
    			null, objApp_Late, Parameters );
    	}
    	catch( Exception theException ) 
    	{
    		String errorMessage;
    		errorMessage = "Error: ";
    		errorMessage = String.Concat( errorMessage, theException.Message );
    		errorMessage = String.Concat( errorMessage, " Line: " );
    		errorMessage = String.Concat( errorMessage, theException.Source );
    
    		MessageBox.Show( errorMessage, "Error" );
    	}
    }
    					
  5. Role até o início da janela de código. Adicione a seguinte linha ao final da lista de diretivas usando :
    using System.Reflection; 
    					

Referências

Para obter mais informações, visite o seguinte site da Microsoft Developer Network (MSDN):
Microsoft Office Development com Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Para obter informações adicionais sobre ligação, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
245115Usando vinculação antecipada e ligação tardia em automação
244167Clientes de automação de escrita para várias versões do Office
247579Usar ligação DISPID para automatizar aplicativos do Office sempre que possível

Propriedades

ID do artigo: 302902 - Última revisão: terça-feira, 27 de março de 2007 - Revisão: 7.4
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
Palavras-chave: 
kbmt kbpia kbautomation kbhowtomaster KB302902 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 302902

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com