Como usar funções do WordBasic em um cliente de automação MFC para Word

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

Neste artigo

Sumário

Este artigo demonstra como automatizar o Microsoft Word de um cliente de automação do MFC e chamar funções do WordBasic.

Mais Informações

Microsoft Word versões anteriores ao Word 97 implementado WordBasic como sua linguagem de programação. Word 97 introduziu Microsoft Visual Basic for Applications (VBA) como seu novo padrão, mas o objetivo de manter compatibilidade com versões anteriores, funções do WordBasic ainda podem ser chamadas. Ao desenvolver soluções para o Word, a Microsoft recomenda que você use o Word objeto modelo em vez do WordBasic, se possível. Para obter informações adicionais sobre equivalentes do WordBasic no modelo de objeto do Word, visite a seguinte site da Microsoft Developer Network (MSDN):
Equivalentes do Visual Basic para comandos do WordBasic
http://msdn2.microsoft.com/en-us/library/aa158432(office.10).aspx
No entanto, se você precisar funcionalidade fornecida por uma função específica do WordBasic para o qual você não encontrar uma palavra adequada equivalente, em seguida, você ainda poderá chamar a função do WordBasic.

Ao automatizar o Word 97 e versões posteriores do Word, você pode executar funções do WordBasic se você adquirir uma interface para o objeto do WordBasic, chamando o método WordBasic da classe Application . O método WordBasic retorna um objeto da classe COleDispatchDriver ; em seguida, você pode usar o objeto é retornado ao chamar funções do WordBasic.

Etapas para criar o cliente de automação do exemplo MFC

As etapas a seguintes demonstram como você pode chamar a função do WordBasic FilePrintSetup através de automação usando argumentos nomeados.

O modelo de objeto do Word fornece uma propriedade para alterar a impressora ativa: a propriedade ActivePrinter . Quando você chamar a propriedade ActivePrinter , ele altera a impressora padrão de sistema. Se você quiser alterar apenas a impressora ativa no Word e não a impressora padrão do sistema, você pode usar a função do WordBasic FilePrintSetup .
  1. Crie um novo projeto MFC EXE dialog-based chamado WordPrint .
  2. Abrir ClassWizard (CTRL+W), clique na guia de automação , clique em Add Class e, em seguida, selecione de uma biblioteca de tipos . Vá para a pasta onde você instalou o Office e selecione uma das seguintes bibliotecas de objeto para o Microsoft Word:
    • Para o Word 2002 e para versões mais recentes do Word, selecione msword.olb .
    • Para o Word 2000, selecione Msword9.olb .
    • Para o Word 97, selecione Msword8.olb .
  3. Selecione todas as classes que exibe o ClassWizard e clique em OK .
  4. Selecione o recurso de diálogo IDD_WORDPRINT_DIALOG e adicione um botão.
  5. Adicionar um manipulador BN_CLICKED para o botão com o código a seguir:
       _Application oWord ;
       Documents oDocs;
       _Document oDoc;
       COleDispatchDriver oWordBasic;
       COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);  //For optional args
    
       //Start Word
       if(!(oWord.CreateDispatch("Word.Application", NULL)))
    
       {
          AfxMessageBox("Error starting Word.", MB_SETFOREGROUND);
          return;
       }
    
       //Open a document
       oDocs = oWord.GetDocuments();
       oDoc = oDocs.Open(COleVariant("C:\\Doc1.doc"), vOpt, vOpt, 
                  vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt);
    
       // Note: If you are using the Word 2000 library, you will
       //      need to specify 12 arguments for the Open method
       // 
       // oDoc = oDocs.Open(COleVariant("C:\\Doc1.doc"), vOpt, vOpt, vOpt, 
       //           vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt);
       //
       // Note: If you are using the Word 2002 library, you will
       //      need to specify 16 arguments for the Open method
       // 
       // oDoc = oDocs.Open(COleVariant("C:\\Doc1.doc"), vOpt, vOpt, vOpt, 
       //           vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt,
       //           vOpt, vOpt, 0, vOpt);
    
       // Note: If you are using the Office Word 2003 library or the Office Word 2007
       // library, you will need to specify 16 arguments for the Open method
       // 
       // oDoc = oDocs.Open(COleVariant("C:\\Doc1.doc"), vOpt, vOpt, vOpt, 
       //           vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt,
       //           vOpt, vOpt, vOpt, vOpt);
    
    
    
       oWordBasic = oWord.GetWordBasic();
    
       //Call the WordBasic FilePrintSetup function.
    
       HRESULT hr;
       OLECHAR FAR* szMethod[3];
       DISPID dispid[3];
    
       //Retrieve the DISPIDs for the function as well as two of its named
       //arguments, Printer and DoNotSetAsSysDefault
       szMethod[0]=OLESTR("FilePrintSetup"); //method name
    
       szMethod[1]=OLESTR("Printer");        //argument name
       szMethod[2]=OLESTR("DoNotSetAsSysDefault"); //argument name
    
       hr = oWordBasic.m_lpDispatch->GetIDsOfNames(IID_NULL, szMethod, 3, 
                                   LOCALE_USER_DEFAULT, dispid);
    
       //Invoke the FilePrintSetup function using named arguments.
       VARIANT vArgs[2];
       DISPPARAMS dp;
       dp.cArgs = 2;
    
       dp.cNamedArgs = 2;
       dp.rgvarg = vArgs;
       dp.rgdispidNamedArgs=&(dispid[1]);  
    
       vArgs[1].vt = VT_I2;
       vArgs[1].iVal = 1;     //DoNotSetAsSysDefault = 1
       vArgs[0].vt = VT_BSTR;
       vArgs[0].bstrVal = ::SysAllocString(OLESTR("Generic / Text Only"));
       //NOTE: You should replace "Generic / Text Only" in the line 
       //above with the name of a printer installed on your system.
    
       hr = oWordBasic.m_lpDispatch->Invoke(dispid[0], IID_NULL, 
                  LOCALE_USER_DEFAULT,DISPATCH_METHOD, &dp, NULL, NULL, NULL);
    
       ::SysFreeString(vArgs[0].bstrVal);
    
       //Print the document
       oDoc.PrintOut(COleVariant((short)false), vOpt, vOpt, 
                     vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, 
                     vOpt, vOpt, vOpt, vOpt, vOpt);
    
       // Note: If you are using the Word 2000 or the Word 2002 library, you will
       //       need to specify 19 arguments for the Printout method
       // 
       // oDoc.PrintOut(COleVariant((short)false), vOpt, vOpt, vOpt, 
       //             vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, 
       //             vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt);
    
       // Note: If you are using the Office Word 2003 library, you will
       //       need to specify 18 arguments for the Printout method
       // 
       // oDoc.PrintOut(COleVariant((short)false), vOpt, vOpt, vOpt, 
       //             vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, 
       //             vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt);
    
    
       //Close the document without saving changes
       oDoc.Close(COleVariant((short)false), vOpt, vOpt);
    
       //Clean-up
       oDoc.ReleaseDispatch();
       oDocs.ReleaseDispatch();
       oWordBasic.ReleaseDispatch();
    
       //Quit Word
       oWord.Quit(COleVariant((short)false), vOpt, vOpt);
    						
    Observação : O código acima usa a biblioteca de objeto do Word 97. Se você estiver usando a biblioteca de objetos para uma versão posterior do Word, você mustmodify as chamadas para Documents::Open() e Document::Printout() para incluir os argumentos adicionais. Não há comentários in-line no código que descrevem as alterações feitas para o Word 2000, Word 2002, Office Word 2003 ou Office Word 2007.
  6. Modifique o nome da impressora no manipulador de botão mencionados anteriormente para corresponder ao nome de uma impressora instalada em seu sistema. O nome da impressora no código deve aparecer o mesmo como ele faz na seção de seu painel de controle impressoras.
  7. Inclua as classes de wrapper para o modelo de objeto do Word em WordPrinterDlg.cpp. Para Word 97, use:
    #include "msword8.h"
    
    e para o Word 2000, use:
    #include "msword9.h"
    
    e para Word 2002, Office Word 2003 ou Office Word 2007, use:
    #include "msword.h"
    
  8. Adicione a seguinte linha ao CWordPrintApp::InitInstance em WordPrinter.cpp para inicializar as bibliotecas OLE:
    AfxOleInit();
    
  9. Crie um documento do Word que essa automação cliente pode usar.

    Por exemplo, crie um dos seguintes documentos de Word:
    • No Word 2007, crie o documento do Word "C:\doc1.docx".
    • No Word 2003 e em versões anteriores do Word, crie o documento do Word "C:\doc1.doc".
  10. Criar e executar o aplicativo.
  11. Quando você clicar no botão adicionado à caixa de diálogo, o Word é iniciado e imprime o documento para a impressora especificada por você.

Observações adicionais

As funções do WordBasic não são definidas nas bibliotecas de objeto para o Word 97 e versões posteriores do Word. Portanto, as classes de wrapper a ClassWizard gera a partir dessas bibliotecas não contêm funções do WordBasic. Você pode exibir a biblioteca de tipos (wb70en32.tlb) do Word 95 no OLE / COM objeto visualizador. Consulte o seguinte artigo na Base de dados de Conhecimento da Microsoft para obter informações sobre como obter a biblioteca de tipo do Word 95:
143434WD: Como obter o Word para Windows Type Library
Documentação para funções do WordBasic não está incluída no Word 97 e versões posteriores do Word. WordBasic funções estão documentadas no "Kit do desenvolvedor do Microsoft Word" (ISBN:1 - 55615 - 880 - 7) e a Ajuda incluída com o Microsoft Word 95.

Referências

Para obter mais informações sobre a propriedade ActivePrinter no Word 97 e versões posteriores do Word, consulte o seguinte artigo Base de dados de Conhecimento:
216026INFO: Propriedade ActivePrinter impressora padrão do sistema de conjuntos do Word

(c) Microsoft Corporation 2000, todos os direitos reservados. Contribuições de Lori Turner, Microsoft Corporation.

Propriedades

ID do artigo: 252719 - Última revisão: quarta-feira, 18 de abril de 2007 - Revisão: 6.1
A informação contida neste artigo aplica-se a:
  • Microsoft Office Word 2007
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Foundation Class Library 4.2
Palavras-chave: 
kbmt kbexpertiseinter kbautomation kbhowto KB252719 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: 252719

Submeter comentários

 

Kontaktieren Sie uns, um weitere Hilfe zu erhalten

Kontaktieren Sie uns, um weitere Hilfe zu erhalten
Wenden Sie sich an den Answer Desk, um professionelle Hilfe zu erhalten.