Cómo utilizar automatización de Word para contar el número de páginas de cada sección de un documento

Seleccione idioma Seleccione idioma
Id. de artículo: 293861 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

En este artículo se describe cómo puede utilizar automatización con Word para averiguar el número de páginas de cada sección de un documento.

Más información

En el código de ejemplo siguiente se utiliza un documento que está guardado en C:\Mydoc.doc. Para probar el código de ejemplo, cree un nuevo documento que tenga varias secciones y varias páginas y guárdelo como C:\Mydoc.doc o cambie la ruta de acceso del documento en el código para hacer referencia a uno de sus documentos de Word existentes.

NOTA: en el código de ejemplo se supone que un salto de sección fuerza un nuevo salto de página y que cada página no contiene más de una sección. Por tanto, cuando inserte saltos de sección mientras crea el documento de Word C:\Mydoc.doc para probar el código de ejemplo, debe elegir Página siguiente como el tipo de Salto de sección.

Ejemplo de Visual Basic

  1. En Visual Basic, cree un nuevo proyecto EXE estándar. De forma predeterminada, se crea Form1.
  2. Agregue un botón de comando a Form1 y agregue el código siguiente al evento Click del botón:
        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
    					
  3. Presione F5 para ejecutar la aplicación y haga clic en el botón en el formulario. El código mostrará el número de páginas de cada sección en la ventana Inmediata.

Ejemplo de MFC

  1. Siga los pasos 1 a 12 del artículo siguiente de Microsoft Knowledge Base para crear un proyecto de ejemplo que utilice las interfaces IDispatch y las funciones miembro que se definen en la biblioteca de tipos de MSWord9.olb:
    178749 CÓMO: Crear un proyecto de automatización mediante MFC y una biblioteca de tipos
  2. Nota: debe quitar la biblioteca de automatización de Excel.

    En la parte superior de AutoProjectDlg.cpp, agregue una de las líneas siguientes:
    • En Word 2002 y en versiones posteriores de Word, agregue la línea siguiente:
      #include "MSWord.h"
    • En Word 2000, agregue la línea siguiente:
      #include "MSWord9.h"
  3. Agregue el código siguiente a CAutoProjectDlg::OnRun() en 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);
    					
  4. Compile y ejecute el proyecto.
  5. Cuando aparezca el cuadro de diálogo, haga clic en Ejecutar. Los resultados del recuento se mostrarán en la ventana de depuración. Debe arrastrar la variable NumPages hasta la ventana de depuración.

(c) Microsoft Corporation 2001, Reservados todos los derechos. Con la colaboración de Lori B. Turner, Microsoft Corporation.

Referencias

Para obtener más información al respecto, visite los siguientes sitios web de Microsoft Developer Network (MSDN):
Microsoft Office Development with Visual Studio (Desarrollo de Microsoft Office con Visual Studio)
http://msdn2.microsoft.com/es-es/library/aa188489(office.10).aspx

Microsoft Office Developer Center
http://www.microsoft.com/spanish/msdn/officexp/
Para obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
253235 ARCHIVO: OFFAUTMN.EXE describe Automatización de Office 97 y 2000 y proporciona código de ejemplo
220607 Cómo automatizar Microsoft Word para que realice una combinación de correspondencia desde Visual Basic
220911 Cómo automatizar Microsoft Word para que realice una combinación de correspondencia desde Visual C++ y MFC
183369 Cómo utilizar Automatización para ejecutar una macro de Word con argumentos

Propiedades

Id. de artículo: 293861 - Última revisión: jueves, 27 de diciembre de 2007 - Versión: 7.0
La información de este artículo se refiere a:
  • Microsoft Office Word 2007
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional
  • Microsoft Foundation Class Library 4.2
Palabras clave: 
kbhowto kbautomation kbexpertiseinter KB293861

Enviar comentarios

 

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