Jak używać automatyzacji programu Word do zliczania liczby stron w każdej sekcji dokumentu

Podsumowanie

W tym artykule opisano sposób używania automatyzacji za pomocą programu Word do określania liczby stron w każdej sekcji dokumentu.

Więcej informacji

Poniższy przykładowy kod używa dokumentu zapisanego w C:\Mydoc.doc. Aby przetestować przykładowy kod, utwórz nowy dokument z wieloma sekcjami i wieloma stronami i zapisz go jako C:\Mydoc.doc lub zmień ścieżkę dokumentu w kodzie, aby odwoływać się do jednego z istniejących dokumentów programu Word.

UWAGA: Przykładowy kod zakłada, że podział sekcji wymusza nowy podział strony i że każda strona zawiera nie więcej niż jedną sekcję. W związku z tym podczas wstawiania podziałów sekcji podczas tworzenia dokumentu programu C:\Mydoc.doc Word na potrzeby testowania przykładowego kodu należy wybrać pozycję Następna strona jako typ podziału sekcji.

Przykład języka Visual Basic

  1. W języku Visual Basic utwórz nowy projekt standardu EXE. Formularz 1 jest tworzony domyślnie.

  2. Dodaj przycisk polecenia do formularza Form1 i dodaj następujący kod do zdarzenia Kliknięcie przycisku:

        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. Naciśnij klawisz F5, aby uruchomić aplikację, a następnie kliknij przycisk w formularzu. Kod wyświetla liczbę stron dla każdej sekcji w oknie Natychmiastowe.

Przykład MFC

  1. Wykonaj kroki od 1 do 12 w poniższym artykule w bazie wiedzy Microsoft Knowledge Base, aby utworzyć przykładowy projekt korzystający z interfejsów IDispatch i funkcji składowych zdefiniowanych w bibliotece typów MSWord9.olb.

  2. Musisz usunąć bibliotekę automatyzacji programu Excel.

    W górnej części pliku AutoProjectDlg.cpp dodaj jeden z następujących wierszy:

    • W programie Word 2002 i nowszych wersjach programu Word dodaj następujący wiersz:

      #include "MSWord.h"
      
    • W programie Word 2000 dodaj następujący wiersz:

      #include "MSWord9.h"
      
  3. Dodaj następujący kod do pliku CAutoProjectDlg::OnRun() w pliku 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. Skompiluj i uruchom projekt.

  5. Po wyświetleniu okna dialogowego kliknij pozycję Uruchom. Wyniki liczby są wyświetlane w oknie Debugowanie. Musisz przeciągnąć zmienną NumPages do okna debugowania.

(c) Microsoft Corporation 2001, Wszelkie prawa zastrzeżone. Wkład Lori B. Turner, Microsoft Corporation.

Informacje

Aby uzyskać więcej informacji, zobacz następujące witryny sieci Web microsoft developer network (MSDN):

Programowanie pakietu Microsoft Office przy użyciu programu Visual Studio https://msdn.microsoft.com/en-us/library/aa188489(office.10).aspx

Centrum deweloperów pakietu Microsoft Office https://msdn.microsoft.com/office

Aby uzyskać dodatkowe informacje, zapoznaj się z artykułem w bazie wiedzy Microsoft Knowledge Base:

220911 jak zautomatyzować program Microsoft Word do wykonywania korespondencji seryjnej przy użyciu języka Visual C++ i MFC