Comment utiliser l’automatisation Word pour compter le nombre de pages dans chaque section d’un document

Résumé

Cet article explique comment utiliser l’automatisation avec Word pour déterminer le nombre de pages dans chaque section d’un document.

Informations supplémentaires

L’exemple de code suivant utilise un document enregistré dans C:\Mydoc.doc. Pour tester l’exemple de code, créez un document avec plusieurs sections et plusieurs pages et enregistrez-le en tant que C:\Mydoc.doc, ou modifiez le chemin du document dans le code pour référencer l’un de vos documents Word existants.

REMARQUE : L’exemple de code suppose qu’un saut de section force un nouveau saut de page et que chaque page ne contient pas plus d’une section. Par conséquent, lorsque vous insérez des sauts de section lors de la création du document C:\Mydoc.doc Word pour tester l’exemple de code, vous devez choisir la page suivante comme type de saut de section.

Exemple Visual Basic

  1. En Visual Basic, créez un projet EXE standard. Form1 est créé par défaut.

  2. Ajoutez un bouton de commande à Form1 et ajoutez le code suivant à l’événement Click du bouton :

        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. Appuyez sur F5 pour exécuter l’application, puis cliquez sur le bouton du formulaire. Le code affiche le nombre de pages pour chaque section de la fenêtre Exécution.

Exemple MFC

  1. Suivez les étapes 1 à 12 de l’article suivant de la Base de connaissances Microsoft pour créer un exemple de projet qui utilise les interfaces IDispatch et les fonctions membres définies dans la bibliothèque de types MSWord9.olb.

  2. Vous devez supprimer la bibliothèque d’automatisation Excel.

    En haut de AutoProjectDlg.cpp, ajoutez l’une des lignes suivantes :

    • Dans Word 2002 et dans les versions ultérieures de Word, ajoutez la ligne suivante :

      #include "MSWord.h"
      
    • Dans Word 2000, ajoutez la ligne suivante :

      #include "MSWord9.h"
      
  3. Ajoutez le code suivant à CAutoProjectDlg::OnRun() dans 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. Compilez et exécutez le projet.

  5. Lorsque la boîte de dialogue s’affiche, cliquez sur Exécuter. Les résultats du décompte sont affichés dans la fenêtre Débogage. Vous devez faire glisser la variable NumPages vers la fenêtre Debug.

(c) Microsoft Corporation 2001, Tous droits réservés. Contributions de Lori B. Turner, Microsoft Corporation.

References

Pour plus d’informations, consultez les sites web Microsoft Developer Network (MSDN) suivants :

Développement Microsoft Office avec Visual Studio https://msdn.microsoft.com/en-us/library/aa188489(office.10).aspx

Centre de développement Microsoft Office https://msdn.microsoft.com/office

Pour plus d’informations, consultez l’article de la Base de connaissances Microsoft :

220911 Comment automatiser Microsoft Word pour effectuer une fusion et publipostage à l’aide de Visual C++ et MFC