Jak pomocí automatizace Wordu spočítat počet stránek v jednotlivých částech dokumentu

Souhrn

Tento článek popisuje, jak můžete pomocí automatizace s Wordem určit počet stránek v jednotlivých částech dokumentu.

Další informace

Následující ukázkový kód používá dokument, který je uložen do C:\Mydoc.doc. Pokud chcete ukázkový kód otestovat, vytvořte nový dokument s více oddíly a více stránkami a uložte ho jako C:\Mydoc.doc, nebo změňte cestu k dokumentu v kódu tak, aby odkazovat na některý z existujících wordových dokumentů.

POZNÁMKA: Vzorový kód předpokládá, že konec oddílu vynutí nový konec stránky a že každá stránka neobsahuje více než jeden oddíl. Proto při vkládání konců oddílů při vytváření dokumentu C:\Mydoc.doc Wordu pro testování ukázkového kódu byste měli jako typ konce oddílu zvolit Další stránka.

Ukázka jazyka Visual Basic

  1. V jazyce Visual Basic vytvořte nový projekt Standard EXE. Formulář1 je ve výchozím nastavení vytvořen.

  2. Přidejte příkazové tlačítko do Form1 a přidejte následující kód do události Click tlačítka:

        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. Stisknutím klávesy F5 spusťte aplikaci a klikněte na tlačítko ve formuláři. Kód zobrazí počet stránek pro každý oddíl v příkazovém okně.

Mfc – ukázka

  1. Postupujte podle kroků 1 až 12 v následujícím článku znalostní báze Microsoft Knowledge Base vytvořit ukázkový projekt, který používá rozhraní IDispatch a členské funkce, které jsou definovány v knihovně typů MSWord9.olb.

  2. Musíte odebrat automatizační knihovnu Excelu.

    V horní části souboru AutoProjectDlg.cpp přidejte jeden z následujících řádků:

    • Ve Wordu 2002 a novějších verzích Wordu přidejte následující řádek:

      #include "MSWord.h"
      
    • V aplikaci Word 2000 přidejte následující řádek:

      #include "MSWord9.h"
      
  3. Do souboru CAutoProjectDlg::OnRun() v souboru AutoProjectDlg.cpp přidejte následující kód.

    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. Zkompilujte a spusťte projekt.

  5. Po zobrazení dialogového okna klikněte na Spustit. Výsledky počtu se zobrazí v okně Ladění. Proměnnou NumPages je nutné přetáhnout do okna ladění.

(c) Microsoft Corporation 2001, Všechna práva vyhrazena. Příspěvky lori B. Turner, Microsoft Corporation.

Odkazy

Další informace naleznete na následujících webech Microsoft Developer Network (MSDN):

Vývoj pro Microsoft Office pomocí sady Visual Studio https://msdn.microsoft.com/en-us/library/aa188489(office.10).aspx

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

Další informace naleznete v článku znalostní báze Microsoft Knowledge Base:

220911 automatizace aplikace Microsoft Word k provedení hromadné korespondence pomocí jazyka Visual C++ a knihovny MFC