Como usar translation from VPE for Csharp Visual para automatizar uma instância em execução de um programa do Office

O suporte para o Office 2003 terminou

A Microsoft terminou o suporte para o Office 2003 em 8 de abril de 2014. Esta alteração afetou as suas atualizações de software e opções de segurança. Saiba o que isto significa para você e como permanecer protegido.

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: 316126
Sumário
Este artigo passo a passo mostra como criar um cliente .NET Microsoft Visual translation from VPE for Csharp ou Microsoft Visual translation from VPE for Csharp 2005 que obtém uma referência de automação para uma instância de um programa do Office em execução.

Criar um Visual translation from VPE for Csharp 2005 ou o aplicativo .NET translation from VPE for Csharp Visual que automatiza uma instância de execução de um programa do Office

Programas de cliente que automatizar o Office podem criar uma nova instância desse programa do Office ou obtenha uma referência para a instância que já está em execução. A Microsoft geralmente recomenda que você crie uma nova instância em vez de anexar a uma instância em execução. No entanto, em alguns cenários, o programa cliente deve automatizar uma instância já em execução de um programa do Office. Nesse caso, o cliente de automação obtém a referência para a automação de objeto do COM (Component Object Model) do servidor de ROT (executar objeto tabela).

Se o servidor de automação se auto-registrado na tabela de objeto com, um cliente .NET pode obter uma referência para a instância em execução chamando o seguinte:
System.Runtime.InteropServices.Marshal.GetActiveObject

- ou -

System.Runtime.InteropServices.Marshal.BindToMoniker

Código de exemplo

  1. Inicie Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005. No menu arquivo , clique em novo e, em seguida, clique em Project . Em Project types , clique em projetos translation from VPE for Csharp Visual e, em modelos , clique em Windows Application . o Form1 é criado por padrão.

    Observação No Visual translation from VPE for Csharp 2005, clique em translation from VPE for Csharp Visual em vez de projetos translation from VPE for Csharp Visual .
  2. Adicione uma referência para a Biblioteca de objetos do Microsoft Excel e o Microsoft Word Object Library . 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, em seguida, clique em Selecionar .

      Observação No Visual translation from VPE for Csharp 2005, você não tem clique em Selecionar .

      Observação Microsoft Office 2003 inclui assemblies de interoperabilidade primários (PIAs). Microsoft Office XP não inclui PIAs, mas eles 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:
      328912INFO: Microsoft Office XP PIAs estão disponíveis para download
    3. Localize o objeto do Microsoft Word biblioteca e em seguida, clique em Selecionar .

      Observação No Visual translation from VPE for Csharp 2005, você não tem clique em Selecionar .
    4. Na caixa de diálogo Add References , clique em OK para aceitar as seleções.
  3. No menu Exibir , clique em caixa de ferramentas para exibir a caixa de ferramentas. Adicione três botões e uma caixa de texto para Form1 . Digite o texto para esses controles da seguinte maneira:
       ID          Text   --------    ---------   button1     Get Automation Reference to running Instance of Excel   button2     Get Automation Reference to Excel using File Moniker   button3     Shell Word and Get Automation Reference to it   textBox1    Enter the filename for the saved xls file					
  4. Defina os manipuladores de evento clique dos controles botão, como segue:
    1. Clique duas vezes em button1 e, em seguida, clique em Designer no menu Exibir .
    2. Clique duas vezes em button2 e clique em Designer no menu Exibir .
    3. Clique duas vezes em button3 .
  5. Adicione o seguinte código à parte superior de Form1.cs, após as outras instruções using :
    using Excel = Microsoft.Office.Interop.Excel;using Word = Microsoft.Office.Interop.Word;					
  6. Adicione o seguinte código para os manipuladores de eventos:
    private void button1_Click(object sender, System.EventArgs e){	//Excel Application Object	Excel.Application oExcelApp;	this.Activate();	//Get reference to Excel.Application from the ROT.	oExcelApp =  (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");	//Display the name of the object.	MessageBox.Show(oExcelApp.ActiveWorkbook.Name);	//Release the reference.	oExcelApp = null;}private void button2_Click(object sender, System.EventArgs e){			Excel.Workbook  xlwkbook;	Excel.Worksheet xlsheet;	//Get a reference to the Workbook object by using a file moniker.	//The xls was saved earlier with this file name.	xlwkbook = (Excel.Workbook)  System.Runtime.InteropServices.Marshal.BindToMoniker(textBox1.Text); 	string sFile = textBox1.Text.Substring(textBox1.Text.LastIndexOf("\\")+1);	xlwkbook.Application.Windows[sFile].Visible = true;	xlwkbook.Application.Visible = true;	xlsheet = (Excel.Worksheet) xlwkbook.ActiveSheet;	xlsheet.Visible = Excel.XlSheetVisibility.xlSheetVisible;	xlsheet.Cells[1,1] = 100;	//Release the reference.	xlwkbook = null;	xlsheet = null;		}private void button3_Click(object sender, System.EventArgs e){	Word.Application wdapp;	//Shell Word	System.Diagnostics.Process.Start("<Path to WINWORD.EXE>");	this.Activate();	//Word and other Office applications register themselves in 	//ROT when their top-level window loses focus. Having a MessageBox 	//forces Word to lose focus and then register itself in the ROT.	MessageBox.Show("Launched Word");	//Get the reference to Word.Application from the ROT.	wdapp = (Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");	//Display the name.	MessageBox.Show(wdapp.Name);	//Release the reference.	wdapp = null;}					
    Observação button3_click() , substituir o Path to Winword.exe pelo caminho correto para Winword.exe. O local padrão para o Microsoft Word é c:\Arquivos de programas\Microsoft Office\Office\Winword.exe.

  7. No menu Build , selecione Build Solution para criar o aplicativo.

Teste o aplicativo

  1. Pressione F5 para compilar e executar seu aplicativo.
  2. Desligue todas as instâncias em execução do Excel.
  3. Inicie o Excel com uma nova pasta de trabalho.
  4. Clique no botão Obter a referência de automação para executar a instância do Excel .
  5. O aplicativo obtém a referência de automação para a instância existente do Excel. A referência de automação é armazenada na variável local oExcelApp para Button1_Click . Uma caixa de mensagem exibe o nome da pasta de trabalho ativa.
  6. Salve a pasta de trabalho no seu disco local. Deixe a pasta de trabalho aberta no Excel.
  7. Digite o nome arquivo e caminho completo da pasta de trabalho que salvou na etapa anterior no textBox1 .
  8. Clique no botão Obter a referência de automação para o Excel usando o identificador de origem do arquivo .
  9. O aplicativo obtém uma referência de automação para a instância em execução do Excel. A referência de automação é armazenada na variável local xlwkbook para button2_Click . Um valor de 100 for inserido na primeira linha e primeira coluna da planilha ativa.
  10. Feche o Excel sem salvar as alterações para a pasta de trabalho.
  11. Clique no botão Obter a referência de automação para o Excel usando o identificador de origem do arquivo .
  12. Uma nova instância do Excel é criada e a pasta de trabalho salva anteriormente é aberta. O aplicativo obtém uma referência de automação para essa instância do Excel. A referência de automação é armazenada na variável local xlwkbook para button2_Click . Um valor de 100 for inserido na primeira linha e primeira coluna da planilha ativa.
  13. Feche o Excel.
  14. Clique no botão Word de shell e obter a referência de automação a ele .
  15. O Word inicia, como se você iniciou em um prompt de comando, e uma caixa de mensagem Iniciada Word é exibida. Exibir uma caixa de mensagem força uma mensagem WM_SETFOCUS para ser enviada para a janela de programa do Word. Isso permite o Word se registrar em ROT (executar objeto tabela).
  16. Feche a caixa de mensagem. Obtém o programa uma automação fazer referência à instância recém-iniciada do Word. A referência de automação é armazenada na variável local wdapp para button3_Click . É exibida uma caixa de mensagem que mostra o nome do objeto Word.Application .

Observações adicionais

Servidores COM podem ser classificados como Multiuse (uma instância) ou usar uma (várias instâncias), dependendo do número de instâncias do servidor que pode executar simultaneamente em um único computador.

Quando uma solicitação para um novo objeto COM trata de um servidor COM Multiuse (instância única), o servidor usa apenas uma instância do arquivo .exe para criar esse objeto. Não importa quantos clientes solicitarem um novo objeto COM, ser será apenas um servidor .exe processo. No servidor usar uma (várias instâncias), cada solicitação para um novo objeto COM inicia uma instância separada do arquivo .exe do servidor. Portanto, mais de uma instância do servidor pode ser executada no mesmo computador.

Várias instâncias do Word (Winword.exe), o Excel (Excel.exe) e o Microsoft Access (MSAccess.exe) podem ser executados simultaneamente. Portanto, esses servidores são definidos como servidores de uso único (várias instâncias). Somente uma instância do PowerPoint (Powerpnt.exe) pode ser executada em qualquer momento. Portanto, o PowerPoint é um servidor Multiuse (uma instância).

Se um servidor COM é usar uma (várias instâncias) ou Multiuse (uma instância) pode afetar sua decisão de usar GetActiveObject para obter a referência a esse servidor. Como potencialmente mais de uma instância do Word, Excel ou Microsoft Access pode estar em execução, GetActiveObject em um determinado servidor pode retornar uma instância que você não esperava. A instância que está registrada pela primeira vez no ROT normalmente é a instância é retornada pela GetActiveObject . Se você desejar obter uma referência de automação para uma instância em execução específica do Word, Excel, ou o Microsoft Access, use BindToMoniker com o nome do arquivo é aberto nessa instância. Para um servidor Multiuse (uma instância) como o PowerPoint, não importa, porque a referência de automação aponta para a mesma instância em execução.

COM servidores devem registrar na tabela de objeto em execução após a inicialização. Os programas do Office se registram quando eles perdem o foco. Se um programa tentar anexar a uma instância em execução antes do programa perde o foco, você receberá uma mensagem de erro. Para obter informações adicionais sobre como solucionar esse problema, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
316125PROBLEMA: Visual translation from VPE for Csharp .NET erro Attaching to Running instância de aplicativo do Office

REFERÊNCIAS

Para obter informações adicionais sobre os diferentes comportamentos dos programas do Office quando você usa GetActiveObject, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
288902INFO: GetObject e comportamento de CreateObject de servidores de automação do Office
Para obter mais informações, consulte 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
ROT GetActiveObject Moniker Office BindToMoniker ACC2003 XL2003 PPT2003 WD2003

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 316126 - Última Revisão: 06/29/2007 04:00:37 - Revisão: 6.7

Microsoft Visual C# 2005 Express Edition, 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

  • kbmt kbpia kbautomation kbhowtomaster KB316126 KbMtpt
Comentários