Как использовать автоматизацию Word для подсчета количества страниц в каждом разделе документа

Аннотация

В этой статье описывается, как использовать автоматизацию с Word для определения количества страниц в каждом разделе документа.

Дополнительная информация

В следующем примере кода используется документ, сохраненный в C:\Mydoc.doc. Для тестирования примера кода создайте документ с несколькими разделами и несколькими страницами и сохраните его как C:\Mydoc.doc или измените путь к документу в коде, чтобы он ссылались на один из существующих документов Word.

ПРИМЕЧАНИЕ. В примере кода предполагается, что разрыв раздела вызывает новый разрыв страницы и что каждая страница содержит не более одного раздела. Таким образом, при вставке разрывов разделов при создании C:\Mydoc.doc Word для тестирования примера кода следует выбрать следующую страницу в качестве типа разрыва раздела.

Пример Visual Basic

  1. В Visual Basic создайте проект EXE уровня "Стандартный". Form1 создается по умолчанию.

  2. Добавьте кнопку команды в Form1 и добавьте следующий код в событие Click кнопки:

        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. Нажмите клавишу F5, чтобы запустить приложение, и нажмите кнопку в форме. Код отображает количество страниц для каждого раздела в окне интерпретации.

Пример MFC

  1. Выполните шаги 1–12 в следующей статье базы знаний Майкрософт, чтобы создать пример проекта, который использует интерфейсы IDispatch и функции-члены, определенные в библиотеке типов MSWord9.olb.

  2. Необходимо удалить библиотеку автоматизации Excel.

    В верхней части файла AutoProjectDlg.cpp добавьте одну из следующих строк:

    • В Word 2002 и более поздних версиях Word добавьте следующую строку:

      #include "MSWord.h"
      
    • В Word 2000 добавьте следующую строку:

      #include "MSWord9.h"
      
  3. Добавьте следующий код в файл CAutoProjectDlg::OnRun() в файле 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. Скомпилируйте и запустите проект.

  5. Когда появится диалоговое окно, нажмите кнопку " Выполнить". Результаты подсчета отображаются в окне отладки. Необходимо перетащить переменную NumPages в окно отладки.

(c) Microsoft Corporation 2001, все права зарезервированы. Участие: Лори Б. Тертер (Lori B. Turner), корпорация Майкрософт.

Ссылки

Дополнительные сведения см. на следующих веб-сайтах Microsoft Developer Network (MSDN):

Разработка Microsoft Office с помощью Visual Studio https://msdn.microsoft.com/en-us/library/aa188489(office.10).aspx

Центр разработчиков Microsoft Office https://msdn.microsoft.com/office

Дополнительные сведения см. в статье базы знаний Майкрософт:

220911 как автоматизировать microsoft Word для выполнения слияния почты с помощью Visual C++ и MFC