So wird's gemacht: Verwenden der Word-Automatisierung zum Zählen der Anzahl von Seiten in jedem Abschnitt eines Dokuments

Zusammenfassung

In diesem Artikel wird beschrieben, wie Sie die Automatisierung mit Word verwenden können, um die Anzahl der Seiten in jedem Abschnitt eines Dokuments zu ermitteln.

Weitere Informationen

Im folgenden Beispielcode wird ein Dokument verwendet, das in C:\Mydoc.doc gespeichert wird. Erstellen Sie zum Testen des Beispielcodes entweder ein neues Dokument mit mehreren Abschnitten und mehreren Seiten, und speichern Sie es als C:\Mydoc.doc, oder ändern Sie den Dokumentpfad im Code, um auf eines Ihrer vorhandenen Word-Dokumente zu verweisen.

HINWEIS: Im Beispielcode wird davon ausgegangen, dass ein Abschnittsumbruch einen neuen Seitenwechsel erzwingt und dass jede Seite nicht mehr als einen Abschnitt enthält. Wenn Sie beim Erstellen des C:\Mydoc.doc Word-Dokuments Abschnittsumbrüche zum Testen des Beispielcodes einfügen, sollten Sie daher "Nächste Seite" als Abschnittsumbruchtyp auswählen.

Visual Basic-Beispiel

  1. Erstellen Sie in Visual Basic ein neues Standard EXE-Projekt. Form1 wird standardmäßig erstellt.

  2. Fügen Sie form1 eine Befehlsschaltfläche hinzu, und fügen Sie dem Click-Ereignis der Schaltfläche den folgenden Code hinzu:

        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. Drücken Sie F5, um die Anwendung auszuführen, und klicken Sie auf die Schaltfläche im Formular. Der Code zeigt die Seitenanzahl für jeden Abschnitt im Direktfenster an.

MFC-Beispiel

  1. Führen Sie die Schritte 1 bis 12 im folgenden Artikel in der Microsoft Knowledge Base aus, um ein Beispielprojekt zu erstellen, das die IDispatch-Schnittstellen und Memberfunktionen verwendet, die in der Typbibliothek "MSWord9.olb" definiert sind.

  2. Sie müssen die Excel-Automatisierungsbibliothek entfernen.

    Fügen Sie oben in "AutoProjectDlg.cpp" eine der folgenden Zeilen hinzu:

    • Fügen Sie in Word 2002 und in späteren Versionen von Word die folgende Zeile hinzu:

      #include "MSWord.h"
      
    • Fügen Sie in Word 2000 die folgende Zeile hinzu:

      #include "MSWord9.h"
      
  3. Fügen Sie den folgenden Code zu CAutoProjectDlg::OnRun() in AutoProjectDlg.cpp hinzu.

    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. Kompilieren Sie das Projekt, und führen Sie es aus.

  5. Wenn das Dialogfeld angezeigt wird, klicken Sie auf "Ausführen". Die Anzahl der Ergebnisse wird im Debugfenster angezeigt. Sie müssen die NumPages-Variable in das Debugfenster ziehen.

(c) Microsoft Corporation 2001, Alle Rechte vorbehalten. Beiträge von Lori B. Turner, Microsoft Corporation.

References

Weitere Informationen finden Sie auf den folgenden Microsoft Developer Network (MSDN)-Websites:

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

Microsoft Office Developer Center https://msdn.microsoft.com/office

Weitere Informationen finden Sie im Artikel in der Microsoft Knowledge Base:

220911 Automatisieren von Microsoft Word zum Ausführen eines Seriendrucks mit Visual C++ und MFC