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
Skapa ett nytt Standard EXE-projekt i Visual Basic. Form1 skapas som standard.
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
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
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.
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"
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);
Kompilera och köra projektet.
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