Slik bruker du Word-automatisering til å telle antall sider i hver del av et dokument

Sammendrag

Denne artikkelen beskriver hvordan du kan bruke automatisering med Word til å bestemme antall sider i hver del av et dokument.

Mer informasjon

Følgende eksempelkode bruker et dokument som er lagret i C:\Mydoc.doc. Hvis du vil teste eksempelkoden, kan du enten opprette et nytt dokument med flere inndelinger og flere sider og lagre det som C:\Mydoc.doc, eller endre dokumentbanen i koden for å referere til ett av de eksisterende Word-dokumentene.

OBS! Eksempelkoden forutsetter at et inndelingsskift tvinger frem et nytt sideskift, og at hver side ikke inneholder mer enn én inndeling. Når du setter inn inndelingsskift mens du oppretter C:\Mydoc.doc Word-dokument for testing av eksempelkoden, bør du derfor velge Neste side som inndelingsskifttype.

Visual Basic-eksempel

  1. Opprett et nytt Standard EXE-prosjekt i Visual Basic. Skjema1 er opprettet som standard.

  2. Legg til en kommandoknapp i Skjema1, og legg til følgende kode i knappens Klikk-hendelse:

        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. Trykk F5 for å kjøre programmet, og klikk knappen i skjemaet. Koden viser sideantallet for hver inndeling i øyeblikksvinduet.

MFC-eksempel

  1. Følg trinn 1 til 12 i følgende artikkel i Microsoft Knowledge Base for å opprette et eksempelprosjekt som bruker IDispatch-grensesnitt og medlemsfunksjoner som er definert i MSWord9.olb-typebiblioteket.

  2. Du må fjerne automatiseringsbiblioteket i Excel.

    Legg til én av følgende linjer øverst i AutoProjectDlg.cpp:

    • Legg til følgende linje i Word 2002 og senere versjoner av Word:

      #include "MSWord.h"
      
    • Legg til følgende linje i Word 2000:

      #include "MSWord9.h"
      
  3. Legg til følgende kode 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. Kompiler og kjør prosjektet.

  5. Klikk Kjør når dialogboksen vises. Antallet resultater vises i feilsøkingsvinduet. Du må dra variabelen NumPages til feilsøkingsvinduet.

(c) Microsoft Corporation 2001, med enerett. Bidrag fra Lori B. Turner, Microsoft Corporation.

Referanser

Hvis du vil ha mer informasjon, kan du se følgende webområder for Microsoft Developer Network (MSDN):

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

Utviklersenter for Microsoft Office https://msdn.microsoft.com/office

Hvis du vil ha mer informasjon, kan du se artikkelen i Microsoft Knowledge Base:

220911 Hvordan automatisere Microsoft Word til å utføre en utskriftsfletting ved hjelp av Visual C++ og MFC