Så här använder du Word-automatisering för att räkna antalet sidor i varje avsnitt i ett dokument

Sammanfattning

Den här artikeln beskriver hur du kan använda automatisering med Word för att fastställa antalet sidor i varje avsnitt i ett dokument.

Mer information

Följande exempelkod använder ett dokument som sparas i C:\Mydoc.doc. Om du vill testa exempelkoden skapar du antingen ett nytt dokument med flera avsnitt och flera sidor och sparar det som C:\Mydoc.doc, eller ändrar dokumentsökvägen i koden så att det refererar till ett av dina befintliga Word-dokument.

Obs! Exempelkoden förutsätter att en avsnittsbrytning tvingar fram en ny sidbrytning och att varje sida inte innehåller mer än ett avsnitt. När du infogar avsnittsbrytningar när du skapar det C:\Mydoc.doc Word-dokumentet för att testa exempelkoden bör du därför välja Nästa sida som avsnittsbrytningstyp.

Visual Basic-exempel

  1. Skapa ett nytt Standard EXE-projekt i Visual Basic. Form1 skapas som standard.

  2. Lägg till en kommandoknapp i Form1 och lägg till följande kod i knappens Klicka-händelse:

        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. Tryck på F5 för att köra programmet och klicka på knappen i formuläret. Koden visar sidantalet för varje avsnitt i fönstret Omedelbart.

MFC-exempel

  1. Följ steg 1 till 12 i följande artikel i Microsoft Knowledge Base för att skapa ett exempelprojekt som använder IDispatch-gränssnitten och medlemsfunktionerna som definieras i msWord9.olb-typbiblioteket.

  2. Du måste ta bort Excel Automation-biblioteket.

    Lägg till någon av följande rader överst i AutoProjectDlg.cpp:

    • Lägg till följande rad i Word 2002 och senare versioner av Word:

      #include "MSWord.h"
      
    • Lägg till följande rad i Word 2000:

      #include "MSWord9.h"
      
  3. Lägg till följande kod i CAutoProjectDlg::OnRun() i 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. Kompilera och köra projektet.

  5. När dialogrutan visas klickar du på Kör. Antalet resultat visas i felsökningsfönstret. Du måste dra variabeln NumPages till felsökningsfönstret.

(c) Microsoft Corporation 2001, Med ensamrätt. Bidrag från Lori B. Turner, Microsoft Corporation.

Referenser

Mer information finns på följande MSDN-webbplatser (Microsoft Developer Network):

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

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

Mer information finns i artikeln i Microsoft Knowledge Base:

220911 Så här automatiserar du Microsoft Word för att utföra en koppla dokument med hjälp av Visual C++ och MFC