Come usare l'automazione di Word per contare il numero di pagine in ogni sezione di un documento

Riepilogo

Questo articolo descrive come usare l'automazione con Word per determinare il numero di pagine in ogni sezione di un documento.

Ulteriori informazioni

Il codice di esempio seguente usa un documento salvato in C:\Mydoc.doc. Per testare il codice di esempio, creare un nuovo documento con più sezioni e più pagine e salvarlo come C:\Mydoc.doc oppure modificare il percorso del documento nel codice per fare riferimento a uno dei documenti di Word esistenti.

NOTA: il codice di esempio presuppone che un'interruzione di sezione forza una nuova interruzione di pagina e che ogni pagina contenga non più di una sezione. Pertanto, quando si inseriscono interruzioni di sezione durante la creazione del documento di Word C:\Mydoc.doc per il test del codice di esempio, è consigliabile scegliere Pagina successiva come tipo di interruzione di sezione.

Esempio di Visual Basic

  1. In Visual Basic creare un nuovo progetto EXE Standard. Form1 viene creato per impostazione predefinita.

  2. Aggiungere un pulsante di comando a Form1 e aggiungere il codice seguente all'evento Click del pulsante:

        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. Premere F5 per eseguire l'applicazione e fare clic sul pulsante nel modulo. Il codice visualizza il conteggio delle pagine per ogni sezione nella finestra Immediata.

Esempio MFC

  1. Seguire i passaggi da 1 a 12 nell'articolo seguente della Microsoft Knowledge Base per creare un progetto di esempio che usa le interfacce IDispatch e le funzioni membro definite nella libreria dei tipi MSWord9.olb.

  2. È necessario rimuovere la libreria di automazione di Excel.

    Nella parte superiore di AutoProjectDlg.cpp aggiungere una delle righe seguenti:

    • In Word 2002 e nelle versioni successive di Word aggiungere la riga seguente:

      #include "MSWord.h"
      
    • In Word 2000 aggiungere la riga seguente:

      #include "MSWord9.h"
      
  3. Aggiungere il codice seguente a CAutoProjectDlg::OnRun() in 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. Compilare ed eseguire il progetto.

  5. Quando viene visualizzata la finestra di dialogo, fare clic su Esegui. I risultati del conteggio vengono visualizzati nella finestra Debug. È necessario trascinare la variabile NumPages nella finestra Debug.

(c) Microsoft Corporation 2001, Tutti i diritti riservati. Contributi di Lori B. Turner, Microsoft Corporation.

Riferimenti

Per altre informazioni, vedere i seguenti siti Web microsoft developer network (MSDN):

Sviluppo di Microsoft Office con Visual Studio https://msdn.microsoft.com/en-us/library/aa188489(office.10).aspx

Centro per sviluppatori di Microsoft Office https://msdn.microsoft.com/office

Per altre informazioni, vedere l'articolo della Microsoft Knowledge Base:

220911 come automatizzare Microsoft Word per eseguire una stampa unione tramite Visual C++ e MFC