如何使用 Word automation 计算文档每节中的页面数
2020/3/18
适用于:
Microsoft Word
本文内容
总结
本文介绍如何使用 Word 中的自动化功能来确定文档的每一节中的页面数。
详细信息
下面的示例代码使用保存到 C:\Mydoc.doc. 的文档。若要测试示例代码,请创建一个包含多个节和多个页面的新文档,并将其另存为 C:\Mydoc.doc,或更改代码中的文档路径以引用您的某个现有 Word 文档。
注意:示例代码假定分节符强制新的分页符,且每个页面中不包含多个部分。 因此,在创建用于测试示例代码的 C:\Mydoc.doc Word 文档的过程中插入分节符时,应选择 "下一页" 作为分节符类型。
Visual Basic 示例
在 Visual Basic 中,创建一个新的标准 EXE 项目。 默认情况下会创建 Form1。
向 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
按 F5 运行该应用程序,然后单击窗体上的按钮。 代码会在 "即时" 窗口中显示每个节的页数。
MFC 示例
按照 Microsoft 知识库中的以下文章中的步骤1到步骤12创建一个示例项目,该项目使用在 MSWord9 类型库中定义的 IDispatch 接口和 member 函数。
必须删除 Excel automation 库。
在 AutoProjectDlg 顶部,添加以下行之一:
在 Word 2002 和更高版本的 Word 中,添加以下行:
#include "MSWord.h"
在 Word 2000 中,添加以下行:
#include "MSWord9.h"
在 AutoProjectDlg 中,将以下代码添加到 CAutoProjectDlg:: OnRun ()。
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);
编译并运行项目。
出现对话框时,单击 "运行"。 计数结果将显示在 "调试" 窗口中。 您必须将 NumPages 变量拖到调试窗口。
(c) Microsoft Corporation 2001,保留所有权限。 Microsoft Corporation 的 Lori Turner。
引用
有关详细信息,请参阅以下 Microsoft 开发人员网络(MSDN)网站:
若要了解详细信息,请查看 Microsoft 知识库中的文章:
220911如何自动化 Microsoft Word 使用 Visual c + + 和 MFC 执行邮件合并