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
W języku Visual Basic utwórz nowy projekt standardu EXE. Formularz 1 jest tworzony domyślnie.
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
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
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.
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"
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);
Skompiluj i uruchom projekt.
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