关键词:VisualBasic,Word对象模型,文档
引言
Word文档是实际工作学习中最为常用的文档格式之一。
随着社会信息化程度的提高,一些传统的由人工完成工作逐渐转向由计算机来处理。计算机自动组卷系统便是一个典型的例子。为了追求更高的效率,一些计算机自动组卷系统的单位用户要求由软件输出Word格式的试卷不需排版直接供印刷使用。
由于MicrosoftOffice套件的普及,Word文档、电子表格文档、电子幻灯片等文档日渐常用。虽然在Office中各个程序的文档可以方便地转换,但是这种转换是以失去文档原本的格式为代价的。例如,在自动组卷系统中,存储在Access数据库中的试卷可以通过Access提供的导出功能产生Word文档,但产生的文档是无格式的,需花费大量时间重新排版方可符合用户在试卷格式上的要求。
针对这一问题,本文讨论通过研究Word对象模型,提出使用该对象模型创建符合用户所要求的特定格式的Word文档的方法。
Word对象模型
1、Word对象模型层次结构
对象是VisualBasic的基石,几乎在VisualBasic中的每个操作都与修改对象有关。Word的任何元素(如文档、表格、段落、域、书签等)都可以用VisualBasic中的对象来代表。
对象代表一个Word的元素,如文档、段落、书签或单个的字符。集合也是一个对象,该对象包含其他数个对象,通常这些对象属于相同的类型,例如,一个集合对象中可包含文档中的所有书签对象。通过使用属性和方法,可以修改单个的对象,也可修改整个的对象集合。
MicrosoftWordVisualBasic提供一套完整的Word对象模型,这是一个以Application为顶层对象的对象层次结构。其结构如图-1所示。
->
对象由两种类型的成员构成,一种是属性,第二种成员是方法。
属性是对象的一个特性或者该对象行为的一个方面。例如,文档属性包含名称、内容、保存状态以及是否启用修订。要更改一个对象的特征,可以修改其属性值。要设置一个属性的值,需在对象的后面紧接一个句点、属性名称、一个等号及新的属性值。下面的示例在"MyDoc.doc"文档中启用修订。
->Documents("MyDoc.doc").TrackRevisions=True->
方法是对象可以进行的动作。例如,只要文档可以打印,Document对象就具有PrintOut方法。方法通常都带有参数,限定动作将如何进行。下面的示例打印活动文档的前三页。
->ActiveDocument.PrintOutFrom:=1,To:=3->
在大多数情况下,方法是动作,而属性是性质。使用方法将导致针对对象的某些事情发生,而使用属性则会返回对象的信息,或者引起对象的某个性质的改变。
2、Document对象和Documents集合对象
在VisualBasic中,可使用Document对象或Documents集合对象的方法来修改文件。Document对象是本文用来创建Word文档的主要对象。
Word对象模型中Documents(Document)对象集(或Document)对象的结构如图-2所示。
->
其中的Paragraphs集合对象与PageSetup对象将是下文的主角。Paragraphs集合对象是由选定内容、范围或文档中的Paragraph对象组成的集合。PageSetup对象代表页面设置描述。PageSetup对象包含了文档的所有页面设置属性(左边距、下边距、纸张大小,等等)。
在熟悉了Word对象模型的基础上,我们可以使用Document对象对Word文档进行各种操作,例如:
2.1新建一篇文档
Documents集合包含所有打开的文档。要新建一篇文档,可使用Add方法将一个Document对象添至Documents集合。
新建文档的方法之一是使用Add方法。Add方法将返回Document对象,该对象引用新文档。在下面的示例中,把Add方法返回的Document对象赋予一个对象变量newDoc。然后设置该Document对象的几种属性和方法。通过newDoc对象变量,可以很容易地控制新文档。
->SetnewDoc=Documents.Add
WithnewDoc
.Content.Font.Name="Arial"
.SaveAsFileName:="Sample.doc"
EndWith->
2.2打开文档
要打开一篇现有的文档,可使用Documents集合的Open方法。下面的代码打开名为MyDocument.doc的文档(该文档位于"MyFolder"文件夹中)。
->Documents.OpenFileName:="C:MyFolderMyDocument.doc"->
2.3保存一篇现有文档
要保存一篇文档,可使用Document对象的Save方法。下面的代码保存名为Sales.doc的文档。
->Documents("Sales.doc").Save->
如果对Documents集合应用Save方法,可以保存所有打开的文档。下面的代码保存所有打开的文档。
->Documents.Save->
2.4保存一篇新文档
要保存一篇文档,可使用Document对象的SaveAs方法。下面的代码将活动文档保存于当前文件夹,取名为"Temp.doc"。
->ActiveDocument.SaveAsFileName:="Temp.doc"->
FileName参数可以只包含文件名,也可包含完整的路径(例如"C:DocumentsTemporaryFile.doc")。
2.5关闭文档
要关闭单个文档,可使用Document对象的Close方法。下面的代码关闭并保存名为Sales.doc的文档。
->Documents("Sales.doc").CloseSaveChanges:=wdSaveChanges->
可应用Documents集合的Close方法关闭所有的文档。下面的代码在不保存修改的情况下关闭所有的文档。
->Documents.CloseSaveChanges:=wdDoNotSaveChanges->
在VisualBasic中创建Word文档
1、VisualBasic中创建Document对象
所有的工作都从Document对象开始,首先在VisualBasic中创建一个Document对象的实例,然后就可以对该实例进行各种可控制:
->DimnewDocAsWord.Document
SetnewDoc=newWord.Document->
一旦创建了Document对象,就可以设置文档的缺省格式,通过设置Content子对象的字体、行间距等属性加以实现:
->WithnewDoc
.Content.Font.Name="宋体"
.Content.Font.Size=12
.Content.Paragraphs.LineSpacing=15.5
EndWith->
由此得到了一个空Word文档。
2、向Word文档中添加文本
接下来,向空文档中添加文本,这将使用Paragraphs集合对象来完成此项工作。InsertAfter方法将文本插入到Selection或Range对象后;InsertBefore方法将文本插入到Selection或Range对象前。以下代码向文档结尾处添加一个段落并设置本段落格式:
->WithnewDoc
.Content.InsertAfter"示例段落…"
.Paragraphs(NewDoc.Paragraphs.count).Alignment=wdAlignParagraphCenter
.Paragraphs(NewDoc.Paragraphs.count).Range.Font.Bold=True
.Paragraphs(NewDoc.Paragraphs.count).Range.Font.Size=28
EndWith->
可用Paragraphs(index)返回一个Paragraph对象,其中index为索引号;count属性值表示该文档主文字部分中的Paragraph对象数。NewDoc.Paragraphs.count恰好为当前正在添加的文本段落的索引号。
如果需要插入表格,可以使用Table对象。Add方法可以在指定范围内新增一表格。下例在活动文档的起始处添加一3x4的表格。
->SetmyRange=ActiveDocument.Range(Start:=0,End:=0)
ActiveDocument.Tables.AddRange:=myRange,NumRows:=3,NumColumns:=4->
以可以使用制表字符得到表格。以下代码在文档尾部插入一个1x4的表格。
->NewDoc.Content.InsertAfter"得分"&vbTab&""&vbTab&"评卷人"&vbTab&""&vbCr->
创建的表格如图-3所示:
->
3、页面设置
当所有段落都添加到文档以后,可以使用PageSetup对象进行页面设置,这需要通过设置PageSetup对象的各种属性来完成。
3.1设置分栏和栏间距:
->newDoc.PageSetup.TextColumns.SetCountNumColumns:=2
newDoc.PageSetup.TextColumns.Spacing=CentimetersToPoints(2)->
3.2设置页边距:
->WithnewDoc.PageSetup
.TopMargin=CentimetersToPoints(4.5)
.BottomMargin=CentimetersToPoints(1.5)
.LeftMargin=CentimetersToPoints(0.8)
.RightMargin=CentimetersToPoints(2)
EndWith->
3.3设置纸张大小:
->WithnewDoc.PageSetup
.PageHeight=CentimetersToPoints(28.1)
.PageWidth=CentimetersToPoints(38.9)
EndWith->
其他的设置项目不再详述。
4、输出文档
对创建完毕的文档,我们可以选自保存为磁盘文件或直接打印输出:
->newDoc.SaveAsFileName:="Sample.doc"
newDoc.PrintOut->
应用实例
以上方法在笔者为某市市委组织部开发的计算机自动组卷系统中加以应用,该系统流程如图-4所示。
->
该系统产生的试卷要求直接用于考核和选拔基层干部的考试中,首先由出题者输入试卷参数,即组卷规则,然后由软件自动组卷并输出Word格式的试卷。笔者应用上述方法开发的软件系统完全满足了用户需求。系统现已投入运行,极大地提高了工作效率,获得了用户的好评。
结束语
本文提出的在VisualBasic中创建Word文档的方法基于对象模型,实用性强,也可以用于其它支持ActiveX的开发平台中。->