Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Resumo
Este artigo descreve como você pode usar a automação com o Word para determinar o número de páginas em cada seção de um documento.
Informações adicionais
O código de exemplo a seguir usa um documento que é salvo em C:\Mydoc.doc. Para testar o código de exemplo, crie um novo documento com várias seções e várias páginas e salve-o como C:\Mydoc.doc ou altere o caminho do documento no código para fazer referência a um dos documentos existentes do Word.
OBSERVAÇÃO: o código de exemplo pressupõe que uma quebra de seção força uma nova quebra de página e que cada página não contém mais de uma seção. Portanto, ao inserir quebras de seção ao criar o C:\Mydoc.doc do Word para testar o código de exemplo, você deve escolher Próxima Página como o tipo de Quebra de Seção.
Exemplo do Visual Basic
No Visual Basic, crie um novo projeto EXE Standard. O Form1 é criado por padrão.
Adicione um botão de comando ao Form1 e adicione o seguinte código ao evento Click do botão:
Dim oApp As Object Dim oDoc As Object Dim oTbl As Object 'Start Word and open the document. Set oApp = CreateObject("Word.Application") 'For Word 2007, change the path to "c:\mydoc.docx" Set oDoc = oApp.Documents.Open("c:\mydoc.doc") 'Repaginate the document. oDoc.Repaginate 'Iterate each section in the document to retrieve the end page of the 'document and compute the page count in that section. The results are 'displayed in the Immediate window. Dim oSec As Object Dim nStartPg As Integer, nEndPg As Integer, nSecPages As Integer Dim NumSections As Integer NumSections = oDoc.Sections.Count nStartPg = 1 For Each oSec In oDoc.Sections nEndPg = oSec.Range.Information(3) - 1 'wdActiveEndPageNumber=3 'Account for the last page. If oSec.Index = NumSections Then nEndPg = nEndPg + 1 nSecPages = nEndPg - nStartPg + 1 Debug.Print "Section " & oSec.Index & " --", _ "StartPage: " & nStartPg, _ "EndPage: " & nEndPg, _ "TotalPages: " & nSecPages nStartPg = nEndPg + 1 Next 'Close the document without saving changes and quit Word. oDoc.Close False oApp.Quit
Pressione F5 para executar o aplicativo e clique no botão no formulário. O código exibe a contagem de páginas para cada seção na janela Imediata.
Exemplo de MFC
Siga as etapas 1 a 12 no artigo a seguir na Base de Dados de Conhecimento Microsoft para criar um projeto de exemplo que usa as interfaces IDispatch e as funções membro definidas na biblioteca de tipos MSWord9.olb.
Você deve remover a biblioteca de automação do Excel.
Na parte superior de AutoProjectDlg.cpp, adicione uma das seguintes linhas:
No Word 2002 e em versões posteriores do Word, adicione a seguinte linha:
#include "MSWord.h"
No Word 2000, adicione a seguinte linha:
#include "MSWord9.h"
Adicione o seguinte código a CAutoProjectDlg::OnRun() em AutoProjectDlg.cpp.
COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR); //Start Word. _Application oWord; oWord.CreateDispatch("Word.Application"); oWord.SetScreenUpdating(FALSE); //Open the document. Documents oDocs = oWord.GetDocuments(); // For Word 2007, use: // _Document oDoc = oDocs.Open(COleVariant("c:\\mydoc.docx"), // vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt, vOpt, vOpt,vOpt,vOpt,vOpt,vOpt); _Document oDoc = oDocs.Open(COleVariant("c:\\mydoc.doc"), vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt, vOpt, vOpt,vOpt,vOpt,vOpt,vOpt); //Repaginate the document. oDoc.Repaginate(); //Iterate the collection of sections in the document to retrieve the page //count for each section. Sections oSecs = oDoc.GetSections(); long NumSections = oSecs.GetCount(); long i; long StartPage=1; //Section start page. long EndPage=0; //Section end page. long NumPages=0; //Number of pages in the section. for(i=1;i<=NumSections;i++) { Section oSec = oSecs.Item(i); Range oSecRange = oSec.GetRange(); VARIANT vInfo = oSecRange.GetInformation(3L);//wdActiveEndPageNumber=3 //If oSec.Index = NumSections Then nEndPg = nEndPg + 1 if(oSec.GetIndex()== NumSections) {EndPage++;} EndPage = vInfo.lVal-1; if(i==NumSections) {EndPage++;} //Account for the last section. NumPages = EndPage - StartPage +1; char buf[5]; sprintf(buf,"%d", NumPages); TRACE1("Section %d\n", oSec.GetIndex()); TRACE3(" StartPage: %d EndPage: %d TotalPages: %d\n", StartPage, EndPage, NumPages); StartPage = EndPage + 1; } //Close the document without saving the changes, and then exit Word. oDoc.Close(COleVariant((short)false), vOpt, vOpt); oWord.Quit(COleVariant((short)false), vOpt, vOpt);
Compile e execute o projeto.
Quando a caixa de diálogo for exibida, clique em Executar. Os resultados da contagem são exibidos na janela Depurar. Você deve arrastar a variável NumPages para a janela Depurar.
(c) Microsoft Corporation 2001, Todos os Direitos Reservados. Contribuições de Lori B. Turner, Microsoft Corporation.
Referências
Para obter mais informações, consulte os seguintes sites do MSDN (Microsoft Developer Network):
Desenvolvimento do Microsoft Office com o Visual Studio https://msdn.microsoft.com/en-us/library/aa188489(office.10).aspx
Centro de Desenvolvedores do Microsoft Office https://msdn.microsoft.com/office
Para obter informações adicionais, veja o artigo na Base de Dados de Conhecimento Microsoft:
220911 como automatizar o Microsoft Word para executar uma mala direta usando o Visual C++ e o MFC